Nu de feestdagen snel naderen, heeft de Kerstman wat extra hulp nodig om cadeautjes te bezorgen aan kinderen over de hele wereld. Vandaag gaan we een datamodel ontwikkelen waarmee de kerstman en zijn elfjes efficiënter kunnen werken.
Achtergrond
De taak van de kerstman is buitengewoon belangrijk, dus hij moet er alles aan doen om op tijd succes te garanderen. Denk aan alle problemen die Howard tegenkwam in 'Jingle All the Way' toen hij probeerde een enkele Turbo Man-figuur te vinden - we kunnen de kerstman niet opnieuw laten glippen, anders zal zijn reputatie worden geruïneerd. Dus om de Kerstman te helpen georganiseerd te blijven, verdelen we zijn activiteiten in drie hoofdfasen.
-
Planning
Eerst moet de kerstman alles plannen. Per slot van rekening kan hij zijn elven niet in paniek door de fabriek laten rennen terwijl ze proberen miljarden leveringen te begrijpen! Naast het lezen van de brieven van dit jaar en het bepalen welke cadeaus kinderen graag zouden willen, moeten we ook trends van voorgaande jaren analyseren om wat gemeenschappelijk materiaal te verzamelen of zelfs cadeaus van tevoren te maken. Dit zal een deel van de achterstand helpen verminderen als we aan de productie beginnen te werken.
-
Productie
Na de planningsfase zijn we klaar om cadeaus te gaan produceren. Met de hulp van de elfjes van de kerstman kunnen we snel cadeautjes maken en verpakken volgens de verlanglijst die we hebben ontvangen. Om het proces efficiënter te maken, moeten we echter alle materialen en informatie die we bij de hand hebben, ordenen, zodat de elven de dingen die ze nodig hebben zo snel mogelijk kunnen pakken.
-
Bezorging
Het moment nadert snel! De rendieren van de kerstman zijn helemaal klaar en de man zelf kijkt angstig op zijn horloge. Cadeaus worden snel in de slee geladen door de helpers van de kerstman. Op dit punt werpt de Kerstman een laatste blik op zijn schema om er zeker van te zijn dat hij alle juiste adressen heeft, evenals eventuele aantekeningen die hij moet overwegen.
Nu we wat achtergrondinformatie hebben over het soort informatie waarmee we moeten werken, kunnen we eindelijk beginnen met het ontwerpen van het gegevensmodel van de Kerstman.
Het gegevensmodel
Dit datamodel bestaat uit drie secties:
- Artikelen
- Personen en verlanglijstjes
- Bezorgingen
Laten we elk van deze eens nader bekijken.
Sectie 1:Artikelen
Ons gegevensmodel begint met de sectie Items, die veel tabellen bevat die centraal staan in de overige twee secties.
De item_type
tafel is hier misschien wel de belangrijkste. Deze tabel bevat een lijst met alle items die we in de fabriek van de kerstman moeten produceren. Voor elk item slaan we de volgende informatie op:
item_name
— de naam van het item.properties
— tekstuele sleutel-waardeparen die de grootte, vorm, kleur en andere eigenschappen van het geproduceerde item aangeven, opgeslagen in een gestructureerd formaat.description
— een ongestructureerde tekstuele beschrijving van het item.
Als we ooit twee vergelijkbare items hebben die alleen verschillen in sommige van hun eigenschappen, zoals kleur, gaan we door en slaan we ze op als afzonderlijke records in de tabel.
Voor de doeleinden van ons datamodel gaan we ervan uit dat de kerstman geen cadeaus koopt, maar in plaats daarvan zijn elven opdracht geeft om alles in huis te produceren. Voor elk ander itemtype hebben we een lijst met vereisten waaraan we moeten voldoen. Dit kunnen arbeid zijn of materialen zoals hout, plastic, metaal en verf. We moeten een lijst met alle mogelijke vereisten opslaan en deze relateren aan elk item dat we moeten produceren. We gebruiken vier tabellen om dit te bereiken.
De eerste van deze vier tabellen is prerequisite
, die, zoals de naam al doet vermoeden, een lijst opslaat met alle mogelijke vereisten. Voor elk record in deze tabel slaan we een unieke vereiste naam op, alle aanvullende properties
(dit keer in een ongestructureerd formaat), en verwijzingen naar het prerequisite_type
en eenheidswoordenboeken. Het prerequisite_type
woordenboek zal worden gebruikt om een lijst op te slaan van alle vereiste categorieën, zoals "arbeid" en "materialen". De unit
woordenboek zal worden gebruikt om een lijst op te slaan van alle eenheden die we zullen gebruiken om onze vereisten te kwantificeren. We kunnen bijvoorbeeld verwachten dat arbeid wordt gemeten in uren of minuten en materialen worden gemeten in termen van productiekosten (dollars), gewicht (kilogrammen) of volume (liters).
De laatste tabel in deze sectie is warehouse
, die we gebruiken om de huidige status van onze voorraad voor zowel artikelen als materialen bij te houden (vandaar de item_type_id
en prerequisite_id
buitenlandse sleutels). Slechts één van deze twee sleutels zal op een bepaald moment een waarde bevatten. Naast deze sleutels bewaren we de uiteindelijke quantity
die beschikbaar was op een bepaalde warehouse_date
.
Sectie 2:Personen en verlanglijsten
Een cruciaal onderdeel van ons gegevensmodel, deze sectie gaat over de dingen die kinderen onder hun kerstbomen willen vinden! We werken van rechts naar links.
De twee meest rechtse tabellen zijn country
en city
. We gebruiken deze twee tabellen bij het verwijzen naar de locatie van een kind dat de kerstman een verlanglijstje heeft gestuurd. Het country
tabel bevat alleen de unieke country_name
attribuut en een lijst van alle bestaande countries
. Om preciezer te zijn met onze locaties, gebruiken we de city
tafel om alle steden op te slaan die de kerstman moet bezoeken. Voor elke stad in deze tabel slaan we op:
city_name
— de naam van de stad, die niet per se uniek is.postal_code
— de postcode van de stad.country_id
— de id van het land waarin de stad zich bevindt. Samen met de vorige twee attributen vormt dit de unieke sleutel voor deze tabel.latitude
enlongitude
— gebruikt om de kerstman te helpen de stad op zijn kaart te vinden of om de coördinaten in te voeren in het navigatiesysteem dat hij gebruikt.
Natuurlijk kun je geen wensen hebben zonder mensen! We slaan een lijst op van alle mensen in de person
tafel. Voor elk individu slaan we een first_name
op , last_name
, birth_date
, en city
. We slaan ook het adres van de persoon op, evenals eventuele aanvullende delivery_details
Misschien moet de kerstman er rekening mee houden (zoals een briefje dat aangeeft dat iemand geen schoorsteen heeft).
De laatste tabel van deze sectie bevat de volledige wish_list
waarin alle ooit gemaakte kerstwensen zijn opgeslagen. Voor elke wens moeten we weten:
person_id
— een verwijzing naar de persoon die de wens deed.item_type_id
— een verwijzing naar het item (type) dat de persoon heeft aangevraagd.quantity
— de gewenste hoeveelheid van het item gespecificeerd in de wens.details
— alle details die de Kerstman kunnen helpen de wens te vervullen.ts
— geeft het moment aan waarop de wens in ons systeem is opgeslagen, wat belangrijk is voor het bepalen van het jaar waarin de wens is gedaan.gift_id
— een verwijzing naar de geschenktabel die het geschenk aanduidt dat werd geleverd om aan deze wens te voldoen.
Sectie 3:Leveringen
Nu zijn we eindelijk aangekomen bij het meest interessante deel van ons datamodel:geschenken en leveringen!
Nadat een enkel item is geproduceerd, voegen we het bijbehorende record in het item
tafel. Houd er rekening mee dat wanneer een artikel wordt geproduceerd, het nog steeds niet aan een geschenk is toegewezen, dus de gift_id
kenmerk zal de waarde null bevatten totdat het item is gekoppeld aan een bepaald geschenk. We moeten ook het type item opslaan dat is geproduceerd (item_type_id
), evenals de quantity
. Hoewel de hoeveelheid van een artikel meestal 1 is, kunnen we in sommige speciale gevallen verschillende hoeveelheden verwachten (bijv. meer dan 1 artikel gecombineerd in een set - dit is zeer ongebruikelijk, maar niettemin mogelijk).
Daarna combineren we een of meer items om een gift
. We updaten item.gift_id
zodra we onze geselecteerde items in dat geschenk hebben verpakt. Elk geschenk wordt afgeleverd bij de bijbehorende persoon (person_id
) en heeft een volgstatus (current_status_id
), evenals een tijdstempel van wanneer de Kerstman van plan is het geschenk te bezorgen (delivery_time_planned
). We updaten ook de waarde van de wish_list.gift_id
kenmerk voor alle artikelen die met succes zijn afgeleverd.
De laatste twee tabellen in dit datamodel hebben betrekking op het volgen van bezorgingsstatussen. Eerst de status
tabel bevat een unieke status_name
waarde die we zullen gebruiken bij het verwijzen naar de huidige status van de gft (gift.current_status_id
). Bovendien is de status_history
table slaat een lijst op met alle statussen voor alle geschenken in onze database, evenals de tijdstempels van alle statusupdates (ts).
Hopelijk helpt ons datamodel de Kerstman om weer een succesvol jaar van leveringen af te ronden, zodat we allemaal onze cadeautjes op tijd kunnen ontvangen. Als je in de stemming bent voor meer SQL met een kerstthema, heeft Vertabelo Academy een speciale kerstuitdaging met 24 zoekopdrachten voorbereid. Ga je gang en bekijk het! Namens de familie Vertabelo wensen wij u een fijne kerst!