Het is algemeen bekend dat de beste manier om iets te leren is door het in een realistisch scenario te oefenen. Hetzelfde geldt uiteraard voor databasemodellering. Daarom heb ik in dit artikel besloten om u te leren hoe u een eenvoudige databasestructuur kunt maken, aan de hand van een schoolvoorbeeld van een hotelkamerreserveringssysteem. Ik laat je zien hoe je aan de slag kunt en geef je enkele ideeën om het model uit te breiden.
Databasemodellering:ontdekken, ontdekken, ontdekken
In dit artikel gaan we een datamodel ontwerpen voor een hotelkamerreserveringssysteem. We zoeken naar een datamodel waarin we informatie kunnen weergeven over de kamers, de gasten en de geboekte reserveringen bij ons denkbeeldige VERTABELO***** Hotel. Al deze informatie wordt opgeslagen in tabellen.
Databasemodellering is een cyclisch ontdekkingsproces. We identificeren eerst de hoofdtabellen en hun attributen. In ons model zijn de hoofdtabellen:room
, guest
en reservation
. Daarna gaan we verder met het verfijnen van onze tabellen door hun attributen of kolommen te ontdekken. Bijvoorbeeld de room
tafel heeft attributen zoals:kamer number
, name
en smoke
markeer onder andere.
Reservation
tabel heeft attributen date_in
, date_out
, status
(geannuleerd, bevestigd) en made_by
(online, in_person, phone, mail), terwijl de attributen van de tabel guest
zijn:first_name
, last_name
en member_since
. Misschien heb je zin in de reservation
tafel heeft meer attributen nodig (zoals kamertype, aantal bedden), we zullen dit punt later behandelen, tot die tijd, overweeg onze reservation
tafel incompleet. Het volgende gegevensmodel gemaakt in Vertabelo toont de hoofdtabellen.
Gegevenstypen:wat zijn de domeinen van toegestane waarden voor een kolom?
Merk op dat elke kolom een gegevenstype heeft (varchar, geheel getal, datum, boolean) om aan te geven wat voor soort waarden aan de kolom kunnen worden toegewezen. Bijvoorbeeld de kolom smoke
op tafel room
is booleaans gegevenstype, wat betekent dat alleen waar of onwaar de toegestane waarden zijn.
Primaire sleutels:het burgerservicenummer van elke record
Elke tabel moet een kolom (of meer dan één) hebben die fungeert als identificatie voor elk record in de tabel. Deze kolom wordt de primaire sleutel (PK) genoemd en best practices op het gebied van databaseontwerp suggereren dat elke tabel een PK moet hebben.
Als we naar het vorige Vertabelo-gegevensmodel kijken, zien we dat elke tabel een kolom heeft met de naam id
met een PK-indicator aan de rechterkant. Deze id-kolommen vormen de PK (als conventie noemen we id
de PK-kolom).
Een belangrijk concept, dat voor veel lezers misschien voor de hand ligt, is dat een PK-kolom geen dubbele waarden kan hebben. Met andere woorden, elke PK-kolom heeft een unieke beperking en elke poging om een nieuw record met een gedupliceerde waarde te maken, wordt door de databasemanager afgewezen met een fout.
Blijf ontdekken; Vind nieuwe database-objecten
Een reservering is een van de meer complexe elementen om in dit datamodel weer te geven. Aan één reservering kunnen meerdere kamers zijn gekoppeld (bijvoorbeeld "Ik wil een tweepersoonskamer reserveren en een aparte kamer met 3 bedden voor mijn kinderen"). Deze zakelijke vereiste voegt 4 dingen toe aan ons model:
Een nieuwe tabel: We moeten een nieuwe tabel maken met de naam room_reserved
, waar we alle kamers van één reservering opslaan.
Voeg twee referenties toe: Een referentie is een zeer belangrijk element in een datamodel. Een referentie beschrijft hoe de ene tabel is gerelateerd aan een andere tabel. In ons model hoort elke gereserveerde kamer bij één reservering, dus we zullen een referentie gebruiken om dat feit te modelleren. Deze verwijzing wordt grafisch weergegeven als een lijn die beide tabellen verbindt.
Bovendien, aangezien elke reservering aan één gast toebehoort, moeten we een nieuwe referentie maken die de guest
en de reservation
tafels.
Een kolom verplaatsen: Aangezien we meerdere kamers kunnen hebben die bij één reservering horen, moeten we annulering per individuele kamer toestaan, daarna verplaatsen we het attribute
status van reservation
naar reserved_room
tafel.
Het bijgewerkte gegevensmodel wordt weergegeven in het volgende diagram dat is ontworpen in Vertabelo:
Wat gebeurt er met de tabellen die door een referentie zijn gelinkt?
Wanneer we een verwijzing tussen twee tabellen maken, wordt er een nieuwe kolom aan een van de tabellen toegevoegd. Deze zojuist toegevoegde kolom wordt een Foreign Key genoemd en fungeert als een verwijzing naar de andere tabel die verbindingen tussen tabellen mogelijk maakt. Bekijk bijvoorbeeld de volgende diagrammen:
Afb. 1 Tabellen reservation
en guest
voor en na het toevoegen van een referentie
Blijf ontdekken; Ga voor meer
Een punt in afwachting van modellering is het feit dat kamers voor een bepaalde tijd door sommige gasten kunnen worden gebruikt. Om dit zakelijke feit weer te geven, hebben we 2 tabellen toegevoegd:hosted_at
en occupied_room
.
Houd er rekening mee dat elke persoon die in het hotel heeft verbleven een record heeft in hosted_at
. Dit record zal een verwijzing hebben naar de kamer die hij/zij bezet en naar de gast. Dit is waarom hosted_at
heeft een dubbele verwijzing naar guest
en occupied_room
.
De tafel occupied_room
zal één record hebben per elke kamer die wordt gehuurd, op dit record kunnen we de velden vinden:check_in
en check_out
van het type tijdstempel die aangeeft wanneer de huur begint en eindigt. Een gegevenstype met tijdstempel slaat een tijdstip op met willekeurige precisie. Elke occupied_room
record heeft ook een verwijzing naar het kamernummer dat wordt gehuurd en indirect via hosted_at
aan de gasten die in deze kamer verbleven.
We hebben ook de tabel room_type
naar het datamodel; het idee is om de kamers te groeperen op kamercategorie of kamertype. Bijvoorbeeld "standaard een tweepersoonsbed", "luxe 2 tweepersoonsbedden" kunnen typebeschrijvingen zijn. We hebben hier ook een max_capacity-kenmerk.
Oefeningen: Databaseontwerp is een gemakkelijk te benaderen discipline, maar het kost tijd om een materiedeskundige te worden. Als u uw eerste stappen zet op het gebied van databaseontwerp, probeer dan het huidige gegevensmodel te voltooien om het volgende mogelijk te maken:
- Als twee of meer gasten een kamer delen, moet u voor elke gast verschillend in- en uitchecken.
- In sommige gevallen kunnen hotels de configuratie van de kamers wijzigen (bijvoorbeeld van standaard een tweepersoonsbed naar luxe 2 tweepersoonsbedden). Voeg aan het datamodel de elementen toe die deze configuratiewijzigingen vertegenwoordigen, en behoud de geschiedenis van elke kamer.