Med højtiden nærmer sig hurtigt, har julemanden brug for noget ekstra hjælp til at levere gaver til børn rundt om i verden. I dag vil vi udvikle en datamodel, der kan hjælpe julemanden og hans nisser til at arbejde mere effektivt.
Baggrund
Julemandens job er ekstremt vigtigt, så han skal gøre alt, hvad han kan for at sikre succes til tiden. Bare husk alle de problemer, Howard stødte på i 'Jingle All the Way', da han forsøgte at finde en enkelt Turbo Man-figur - vi kan ikke lade julemanden glide op igen, ellers vil hans omdømme blive ødelagt. Så for at hjælpe julemanden med at holde sig organiseret opdeler vi hans aktiviteter i tre hovedfaser.
-
Planlægning
Først skal julemanden planlægge alt. Han kan jo ikke have sine elvere rende rundt på fabrikken og gå i panik, mens de forsøger at finde mening i milliarder af leverancer! Udover at læse dette års breve og bestemme, hvilke gaver børn gerne vil have, bør vi også analysere eventuelle tendenser fra tidligere år for at samle nogle fælles materialer eller endda producere gaver på forhånd. Dette vil hjælpe med at reducere noget af efterslæbet, når vi begynder at arbejde på produktionen.
-
Produktion
Efter planlægningsfasen er vi klar til at begynde at producere gaver. Ved hjælp af julemandens nisser kan vi hurtigt fremstille og pakke gaver efter de ønskesedler, vi har modtaget. For at gøre processen mere effektiv er vi dog nødt til at organisere alt materiale og information, vi har ved hånden, så elverne kan få fat i de ting, de skal bruge, så hurtigt som muligt.
-
Levering
Øjeblikket nærmer sig hurtigt! Julemandens rensdyr er klar, og manden selv tjekker spændt sit ur. Gaver bliver hurtigt læsset i slæden af julemandens hjælpere. På dette tidspunkt tager julemanden et sidste kig på sin tidsplan for at sikre, at han har alle de rigtige adresser, såvel som eventuelle noter, han skal overveje.
Nu hvor vi har lidt baggrund om den slags information, vi skal arbejde med, kan vi endelig begynde at designe julemandens datamodel.
Datamodellen
Denne datamodel består af tre sektioner:
- Elementer
- Personer og ønskelister
- Leveringer
Lad os se nærmere på hver af disse.
Afsnit 1:Varer
Vores datamodel begynder med sektionen Items, som indeholder mange tabeller, der er centrale for de resterende to sektioner.
item_type
tabellen er uden tvivl den vigtigste her. Denne tabel indeholder en liste over alle varer, vi skal producere på julemandens fabrik. For hver vare gemmer vi følgende oplysninger:
item_name
— varens navn.properties
— tekstlige nøgleværdipar, der angiver størrelsen, formen, farven og andre egenskaber for den producerede vare, gemt i et struktureret format.description
— en ustruktureret tekstbeskrivelse af emnet.
Hvis vi nogensinde har to lignende genstande, der kun adskiller sig i nogle af deres egenskaber, såsom farve, vil vi gå videre og gemme dem som individuelle poster i tabellen.
I forbindelse med vores datamodel antager vi, at julemanden ikke køber gaver, men vil i stedet beordre sine nisser til at producere alt i huset. For hver anden varetype har vi en liste over forudsætninger, som vi skal opfylde. Disse kunne være arbejdskraft eller materialer som træ, plastik, metal og maling. Vi bliver nødt til at gemme en liste over alle mulige forudsætninger og relatere dem til hver vare, vi skal producere. Vi bruger fire tabeller til at opnå dette.
Den første af disse fire tabeller er prerequisite
, der, som navnet antyder, gemmer en liste over alle mulige forudsætninger. For hver post i denne tabel gemmer vi et unikt forudsætningsnavn, alle yderligere properties
(denne gang i et ustruktureret format), og referencer til prerequisite_type
og enhedsordbøger. prerequisite_type
ordbogen vil blive brugt til at gemme en liste over alle forudsætningskategorier, såsom "arbejdskraft" og "materialer". unit
ordbogen vil blive brugt til at gemme en liste over alle enheder, vi vil bruge til at kvantificere vores forudsætninger. For eksempel kan vi forvente, at arbejdskraft måles i timer eller minutter, og at materialer måles i form af produktionsomkostninger (dollar), vægt (kilogram) eller volumen (liter).
Den sidste tabel i dette afsnit er warehouse
, som vi vil bruge til at spore den aktuelle status for vores beholdning for både varer og materialer (deraf item_type_id
og prerequisite_id
fremmednøgler). Kun én af disse to nøgler vil indeholde en værdi på et givet tidspunkt. Ud over disse nøgler gemmer vi den endelige quantity
der var tilgængelig på en bestemt warehouse_date
.
Afsnit 2:Personer og ønskelister
En kritisk del af vores datamodel, dette afsnit omhandler de ting, børn ønsker at finde under deres juletræer! Vi arbejder fra højre mod venstre.
De to tabeller længst til højre er country
og city
. Vi bruger disse to tabeller, når vi henviser til placeringen af et barn, der sendte julemanden en ønskeliste. country
tabel indeholder kun det unikke country_name
attribut og en liste over alle eksisterende countries
. For at være mere præcis med vores placeringer bruger vi city
bord til at opbevare alle byer, julemanden skal besøge. For hver by i denne tabel gemmer vi:
city_name
— navnet på byen, som ikke nødvendigvis er unikt.postal_code
— byens postnummer.country_id
— id'et for det land, byen ligger i. Sammen med de to foregående attributter danner dette den unikke nøgle til denne tabel.latitude
oglongitude
— bruges til at hjælpe julemanden med at finde byen på sit kort eller til at indtaste dens koordinater i det navigationssystem, han bruger.
Selvfølgelig kan du ikke have ønsker uden mennesker! Vi gemmer en liste over alle personer i person
bord. For hver enkelt person gemmer vi en first_name
, last_name
, birth_date
og city
. Vi gemmer også personens adresse samt eventuelle yderligere delivery_details
Julemanden skal muligvis overveje (såsom en seddel, der angiver, at en person ikke har en skorsten).
Den sidste tabel i dette afsnit indeholder den fulde wish_list
der gemmer alle juleønsker nogensinde. For hvert ønske skal vi vide:
person_id
— en henvisning til den person, der fremsatte ønsket.item_type_id
— en henvisning til den vare (type), som personen anmodede om.quantity
— den ønskede mængde af varen angivet i ønsket.details
— alle detaljer, der kan hjælpe julemanden med at opfylde ønsket.ts
— angiver det øjeblik, hvor ønsket blev gemt i vores system, hvilket er vigtigt for at bestemme året, hvor ønsket blev fremsat.gift_id
— en henvisning til gavebordet, der angiver den gave, der blev leveret for at opfylde dette ønske.
Afsnit 3:Leveringer
Nu er vi endelig nået frem til den mest interessante del af vores datamodel – gaver og leveringer!
Når en enkelt vare er produceret, indsætter vi dens relaterede post i item
bord. Bemærk, at når en vare er produceret, er den stadig ikke tildelt nogen gave, så gift_id
attribut vil indeholde værdien null, indtil varen er knyttet til en bestemt gave. Vi skal også gemme den type vare, der blev produceret (item_type_id
), samt dens quantity
. Mens en vares antal for det meste vil være 1, kan vi forvente forskellige mængder i nogle specielle tilfælde (f.eks. mere end 1 vare kombineret i et sæt – dette er meget usædvanligt, men ikke desto mindre muligt).
For at komme videre, kombinerer vi en eller flere varer for at producere en gift
. Vi opdaterer item.gift_id
når vi har pakket vores udvalgte varer ind i den gave. Hver gave vil blive leveret til dens relaterede person (person_id
) og vil have en sporingsstatus (current_status_id
), samt et tidsstempel for, hvornår julemanden planlægger at levere gaven (delivery_time_planned
). Vi opdaterer også værdien af wish_list.gift_id
attribut for alle varer, der blev leveret.
De sidste to tabeller i denne datamodel vedrører sporing af leveringsstatusser. Først status
tabel indeholder en unik status_name
værdi, som vi vil bruge, når vi refererer til den aktuelle status for gft'en (gift.current_status_id
). Derudover er status_history
tabel gemmer en liste over alle statusser for alle gaver i vores database, samt tidsstempler for alle statusopdateringer (ts).
Forhåbentlig vil vores datamodel hjælpe julemanden med at fuldføre endnu et vellykket år med leveringer, så vi alle kan modtage vores gaver til tiden. Hvis du er i humør til mere jule-tema SQL, har Vertabelo Academy forberedt en speciel 24-forespørgsel ferieudfordring. Gå videre og tjek det ud! På vegne af Vertabelo-familien håber vi, at du får en dejlig jul!