Database
 sql >> Database >  >> RDS >> Database

Consegnare i regali di Natale:il modello di dati di Babbo Natale

Con le vacanze che si avvicinano rapidamente, Babbo Natale ha bisogno di ulteriore aiuto per consegnare regali ai bambini di tutto il mondo. Oggi svilupperemo un modello di dati che può aiutare Babbo Natale e i suoi elfi a lavorare in modo più efficiente.

Sfondo

Il lavoro di Babbo Natale è estremamente importante, quindi deve fare tutto il possibile per garantire un successo puntuale. Ricorda solo tutti i problemi che Howard ha incontrato in "Jingle All the Way" quando ha cercato di trovare una singola figura di Turbo Man:non possiamo lasciare che Babbo Natale sbagli di nuovo, o la sua reputazione sarà rovinata. Quindi, per aiutare Babbo Natale a rimanere organizzato, divideremo le sue attività in tre fasi principali.

  1. Pianificazione

    Innanzitutto, Babbo Natale deve pianificare tutto. Dopotutto, non può avere i suoi elfi che corrono per la fabbrica e si fanno prendere dal panico mentre cercano di dare un senso a miliardi di consegne! Oltre a leggere le lettere di quest'anno e determinare quali regali vorrebbero i bambini, dovremmo anche analizzare eventuali tendenze degli anni precedenti per raccogliere alcuni materiali comuni o addirittura produrre regali in anticipo. Ciò contribuirà a ridurre parte dell'arretrato mentre iniziamo a lavorare sulla produzione.

  2. Produzione

    Dopo la fase di progettazione, siamo pronti per iniziare a produrre regali. Con l'aiuto degli elfi di Babbo Natale, possiamo fabbricare e confezionare rapidamente regali in base alle liste dei desideri che abbiamo ricevuto. Per rendere il processo più efficiente, però, dobbiamo organizzare tutti i materiali e le informazioni che abbiamo a disposizione in modo che gli elfi possano prendere le cose di cui hanno bisogno il più rapidamente possibile.

  3. Consegna

    Il momento si avvicina velocemente! Le renne di Babbo Natale sono tutte a posto e l'uomo stesso sta controllando con ansia l'orologio. I regali vengono rapidamente caricati sulla slitta dagli aiutanti di Babbo Natale. A questo punto, Babbo Natale sta dando un'ultima occhiata al suo programma per assicurarsi di avere tutti gli indirizzi giusti, oltre a tutte le note che dovrà prendere in considerazione.

Ora che abbiamo un po' di background sul tipo di informazioni con cui dovremo lavorare, possiamo finalmente iniziare a progettare il modello di dati di Babbo Natale.

Il modello dei dati




Questo modello di dati è composto da tre sezioni:

  1. Articoli
  2. Persone e liste dei desideri
  3. Consegne

Diamo un'occhiata più da vicino a ciascuno di questi.

Sezione 1:Oggetti

Il nostro modello di dati inizia con la sezione Articoli, che contiene molte tabelle che sono centrali per le restanti due sezioni.

Il item_type la tabella è probabilmente la più importante qui. Questa tabella contiene un elenco di tutti gli articoli che dovremo produrre nella fabbrica di Babbo Natale. Per ogni articolo, memorizzeremo le seguenti informazioni:

  • item_name — il nome dell'elemento.
  • properties — coppie di valori-chiave testuali che denotano la dimensione, la forma, il colore e altre proprietà dell'elemento prodotto, archiviate in un formato strutturato.
  • description — una descrizione testuale non strutturata dell'oggetto.

Se mai avessimo due elementi simili che differiscono solo per alcune delle loro proprietà, come il colore, andremo avanti e li memorizzeremo come record individuali nella tabella.

Ai fini del nostro modello di dati, supponiamo che Babbo Natale non acquisterà regali ma ordinerà invece ai suoi elfi di produrre tutto in casa. Per ogni diverso tipo di articolo, avremo un elenco di prerequisiti che dobbiamo soddisfare. Questi potrebbero essere manodopera o materiali come legno, plastica, metallo e vernici. Dovremo memorizzare un elenco di tutti i possibili prerequisiti e metterli in relazione con ogni articolo che dobbiamo produrre. Utilizzeremo quattro tabelle per raggiungere questo obiettivo.

La prima di queste quattro tabelle è prerequisite , che, come suggerisce il nome, memorizza un elenco di tutti i possibili prerequisiti. Per ogni record in questa tabella, memorizzeremo un nome prerequisito univoco, tutte le properties aggiuntive (questa volta in un formato non strutturato) e riferimenti al prerequisite_type e dizionari unitari. Il prerequisite_type dizionario verrà utilizzato per memorizzare un elenco di tutte le categorie di prerequisiti, come "lavoro" e "materiali". L'unit dizionario verrà utilizzato per memorizzare un elenco di tutte le unità che utilizzeremo per quantificare i nostri prerequisiti. Ad esempio, possiamo aspettarci che la manodopera venga misurata in ore o minuti e che i materiali vengano misurati in termini di costo di produzione (dollari), peso (chilogrammi) o volume (litri).

L'ultima tabella in questa sezione è warehouse , che utilizzeremo per tenere traccia dello stato attuale del nostro inventario sia per gli articoli che per i materiali (da cui il item_type_id e prerequisite_id chiavi esterne). Solo una di queste due chiavi conterrà un valore in un dato momento. Oltre a queste chiavi, memorizzeremo la quantity finale disponibile in una particolare warehouse_date .

Sezione 2:Persone e liste dei desideri

Una parte fondamentale del nostro modello di dati, questa sezione tratta delle cose che i bambini vogliono trovare sotto i loro alberi di Natale! Lavoreremo da destra a sinistra.

Le due tabelle più a destra sono country e city . Useremo queste due tabelle per fare riferimento alla posizione di un bambino che ha inviato a Babbo Natale una lista dei desideri. Il country la tabella contiene solo il country_name univoco attributo e un elenco di tutti i countries esistenti . Per essere più precisi con le nostre posizioni, utilizzeremo la city tabella per memorizzare tutte le città che Babbo Natale dovrà visitare. Per ogni città in questa tabella, memorizzeremo:

  • city_name — il nome della città, che non è necessariamente univoco.
  • postal_code — il codice postale della città.
  • country_id — l'ID del paese in cui si trova la città. Insieme ai due attributi precedenti, questo costituisce la chiave univoca per questa tabella.
  • latitude e longitude — usato per aiutare Babbo Natale a trovare la città sulla sua mappa o per inserire le sue coordinate nel sistema di navigazione che usa.

Certo, non puoi avere desideri senza le persone! Memorizzeremo un elenco di tutte le persone nella person tavolo. Per ogni individuo, memorizzeremo un first_name , last_name , birth_date e city . Conserveremo anche l'indirizzo della persona, nonché eventuali delivery_details aggiuntivi Potrebbe essere necessario prendere in considerazione Babbo Natale (come una nota che indica che una persona non ha un camino).

L'ultima tabella di questa sezione contiene la wish_list che memorizza tutti gli auguri di Natale mai fatti. Per ogni desiderio, dobbiamo sapere:

  • person_id — un riferimento alla persona che ha espresso il desiderio.
  • item_type_id — un riferimento all'elemento (tipo) richiesto dalla persona.
  • quantity — la quantità desiderata dell'articolo specificata nel desiderio.
  • details — tutti i dettagli che possono aiutare Babbo Natale a realizzare il desiderio.
  • ts — indica il momento in cui il desiderio è stato memorizzato nel nostro sistema, che è importante per determinare l'anno in cui è stato espresso il desiderio.
  • gift_id — un riferimento alla tabella dei regali che denota il regalo che è stato consegnato per soddisfare questo desiderio.

Sezione 3:Consegne

Ora siamo finalmente arrivati ​​alla parte più interessante del nostro modello di dati:regali e consegne!

Dopo che un singolo articolo è stato prodotto, inseriamo il relativo record nell'item tavolo. Tieni presente che quando un articolo viene prodotto, non viene comunque assegnato a nessun regalo, quindi il gift_id l'attributo conterrà un valore nullo fino a quando l'oggetto non sarà associato a un particolare regalo. Dovremo anche memorizzare il tipo di articolo che è stato prodotto (item_type_id ), così come la sua quantity . Sebbene la quantità di un articolo sarà per lo più 1, possiamo aspettarci quantità diverse in alcuni casi speciali (ad esempio, più di 1 articolo combinato in un set:questo è molto insolito ma comunque possibile).

Andando avanti, combineremo uno o più articoli per produrre un gift . Aggiorneremo item.gift_id una volta che abbiamo confezionato i nostri articoli selezionati in quel regalo. Ogni regalo sarà consegnato alla sua persona correlata (person_id ) e avrà uno stato di tracciamento (current_status_id ), oltre a un timestamp di quando Babbo Natale prevede di consegnare il regalo (delivery_time_planned ). Aggiorneremo anche il valore di wish_list.gift_id attributo per tutti gli articoli che sono stati consegnati correttamente.

Le ultime due tabelle in questo modello di dati riguardano il monitoraggio degli stati di consegna. Innanzitutto, lo status la tabella contiene un status_name univoco valore che utilizzeremo quando faremo riferimento allo stato corrente del gft (gift.current_status_id ). Inoltre, la status_history la tabella memorizzerà un elenco di tutti gli stati per tutti i regali nel nostro database, nonché i timestamp di tutti gli aggiornamenti di stato (ts).

Si spera che il nostro modello di dati aiuterà Babbo Natale a completare un altro anno di consegne di successo in modo che tutti noi possiamo ricevere i nostri regali in tempo. Se sei dell'umore giusto per un SQL più a tema natalizio, Vertabelo Academy ha preparato una speciale sfida natalizia con 24 query. Vai avanti e dai un'occhiata! A nome della famiglia Vertabelo, vi auguriamo un meraviglioso Natale!