È risaputo che il modo migliore per imparare qualcosa è metterlo in pratica in uno scenario di vita reale. Ovviamente, lo stesso vale per la modellazione di database. Pertanto, in questo articolo ho deciso di insegnarti come creare una semplice struttura di database, prendendo un esempio da manuale di un sistema di prenotazione di camere d'albergo. Ti mostrerò come iniziare e ti darò alcune idee per estendere il modello.
Modellazione di database:scopri, scopri, scopri
In questo articolo progetteremo un modello di dati per un sistema di prenotazione di camere d'albergo. Cerchiamo un modello di dati in cui possiamo rappresentare le informazioni sulle camere, gli ospiti e le prenotazioni prenotate nel nostro immaginario VERTABELO***** Hotel. Tutte queste informazioni verranno archiviate in tabelle.
La modellazione del database è un processo di rilevamento ciclico. Per prima cosa identifichiamo le tabelle principali e i suoi attributi. Nel nostro modello i tavoli principali sono:room
, guest
e reservation
. Quindi continuiamo a perfezionare le nostre tabelle scoprendo i loro attributi o colonne. Ad esempio, la room
la tabella ha attributi come:stanza number
, name
e smoke
flag tra gli altri.
Reservation
la tabella ha gli attributi date_in
, date_out
, status
(annullato, confermato) e made_by
(online, di persona, telefono, mail), mentre gli attributi del tavolo guest
sono:name
, last_name
e member_since
. Forse ti senti come la reservation
la tabella ha bisogno di più attributi (come tipo di camera, numero di letti), tratteremo questo punto in seguito, fino ad allora, considera la nostra reservation
tabella incompleta. Il seguente modello di dati creato in Vertabelo mostra le tabelle principali.
Tipi di dati:quali sono i domini dei valori consentiti per una colonna?
Si noti che ogni colonna ha un tipo di dati (varchar, integer, date, boolean) per indicare che tipo di valori possono essere assegnati alla colonna. Ad esempio, la colonna smoke
sul tavolo room
è booleano tipo di dati, che significa solo vero o falso sono i valori consentiti.
Chiavi primarie:il numero di previdenza sociale di ogni record
Ogni tabella dovrebbe avere una colonna (o più di una) che funge da identificatore per ogni record nella tabella. Questa colonna è chiamata chiave primaria (PK) e le best practice sulla progettazione del database suggeriscono che ogni tabella deve avere una PK.
Se diamo un'occhiata al precedente modello di dati Vertabelo, vedremo che ogni tabella ha una colonna chiamata id
con un indicatore PK a destra. Queste colonne id formano la PK (come convenzione chiamiamo id
la colonna PK).
Un concetto importante, forse ovvio per molti lettori, è che una colonna PK non può avere valori duplicati. In altre parole, ogni colonna PK ha un vincolo univoco e qualsiasi tentativo di creare un nuovo record con un valore duplicato verrà rifiutato con un errore dal gestore del database.
Continua a scoprire; Trova nuovi oggetti database
Una prenotazione è uno degli elementi più complessi da rappresentare in questo modello di dati. Ad una prenotazione possono essere associate più stanze (ad esempio “Desidero prenotare una camera doppia e una camera separata con 3 letti per i miei bambini”). Questo requisito aziendale aggiunge 4 cose al nostro modello:
Una nuova tabella: Dobbiamo creare una nuova tabella chiamata room_reserved
, dove conserviamo tutte le camere appartenenti a una prenotazione.
Aggiungi due riferimenti: Un riferimento è un elemento molto importante in un modello di dati. Un riferimento descrive come una tabella è correlata a un'altra tabella. Nel nostro modello, ogni camera prenotata appartiene a una prenotazione, quindi utilizzeremo un riferimento per modellare tale fatto. Questo riferimento è rappresentato graficamente come una linea che collega entrambe le tabelle.
Inoltre, poiché ogni prenotazione appartiene a un ospite, dobbiamo creare un nuovo riferimento che colleghi il guest
e la reservation
tavoli.
Sposta una colonna: Poiché possiamo avere più camere appartenenti a una prenotazione, dobbiamo consentire la cancellazione per singola camera, dopodiché spostiamo l'attribute
stato da reservation
a reserved_room
tabella.
Il modello di dati aggiornato è mostrato nel diagramma seguente progettato in Vertabelo:
Cosa succede alle tabelle collegate da un riferimento?
Quando creiamo un riferimento tra due tabelle, una nuova colonna viene aggiunta a una delle tabelle. Questa colonna appena aggiunta è chiamata chiave esterna e funge da puntatore all'altra tabella consentendo connessioni tra tabelle. Ad esempio, dai un'occhiata ai seguenti diagrammi:
Fig. 1 Tavoli reservation
e guest
prima e dopo l'aggiunta di un riferimento
Continua a scoprire; Scegli di più
Un punto in attesa di essere modellato è il fatto che le stanze possono essere utilizzate da alcuni ospiti per un periodo di tempo. Per rappresentare questo fatto commerciale, abbiamo aggiunto 2 tabelle:hosted_at
e occupied_room
.
Tieni presente che ogni persona che ha soggiornato presso l'hotel avrà un record in hosted_at
. Questo record avrà un riferimento alla stanza che occupava e all'ospite. Ecco perché hosted_at
ha un doppio riferimento verso guest
e occupied_room
.
La tabella occupied_room
avrà un record per ogni stanza in affitto, su questo record possiamo trovare i campi:check_in
e check_out
di tipo timestamp che indica quando inizia e finisce il noleggio. Un tipo di dati timestamp memorizza un punto nel tempo con precisione arbitraria. Ogni occupied_room
record conterrà anche un riferimento al numero della camera affittata e indirettamente tramite hosted_at
agli ospiti che hanno soggiornato in questa camera.
Abbiamo anche aggiunto la tabella room_type
al modello dati; l'idea è di raggruppare le stanze per categoria o tipologia di stanza. Ad esempio, "standard un letto matrimoniale", "lusso 2 letti matrimoniali" possono essere descrizioni del tipo. Abbiamo anche un attributo max_capacity qui.
Esercizi: La progettazione di database è una disciplina di facile approccio, tuttavia, ci vuole tempo per diventare un esperto in materia. Se stai facendo i primi passi sulla progettazione del database, prova a completare il modello di dati corrente per consentire:
- Se due o più ospiti condividono una camera, consenti check-in e check-out diversi per ogni ospite.
- In alcuni casi gli hotel possono modificare la configurazione delle camere (ad esempio da standard un letto matrimoniale a 2 letti matrimoniali luxury). Aggiungi al modello dati gli elementi per rappresentare tali modifiche alla configurazione, mantenendo lo storico di ogni stanza.