sql >> Databasteknik >  >> RDS >> Database

Designa en datamodell för ett hotellrumsbokningssystem

Det är allmänt känt att det bästa sättet att lära sig något är att öva det i ett verkligt scenario. Uppenbarligen gäller samma sak för databasmodellering. Därför, i den här artikeln, bestämde jag mig för att lära dig hur du skapar en enkel databasstruktur, med ett läroboksexempel på ett bokningssystem för hotellrum. Jag kommer att visa dig hur du kommer igång och ge dig några idéer för att utöka modellen.

Databasmodellering:Upptäck, upptäck, upptäck

I den här artikeln kommer vi att utforma en datamodell för ett bokningssystem för hotellrum. Vi letar efter en datamodell där vi kan representera information om rummen, gästerna och de bokningar som bokats på vårt tänkta VERTABELO***** Hotell. All denna information kommer att lagras i tabeller.

Databasmodellering är en cyklisk upptäcktsprocess. Vi identifierar först huvudtabellerna och dess attribut. I vår modell är huvudtabellerna:room , guest och reservation . Sedan fortsätter vi att förfina våra tabeller genom att upptäcka deras attribut eller kolumner. Till exempel room tabellen har attribut som:rum number , name och smoke flagga bland annat.

Reservation tabellen har attributen date_in , date_out , status (avbruten, bekräftad) och made_by (online, in_person, phone, mail), medan attributen för tabellen guest är:first_name , last_name och member_since . Du kanske känner för reservation bordet behöver fler attribut (som rumstyp, antal bäddar), vi kommer att täcka denna punkt senare, tills dess, överväg vår reservation tabellen ofullständig. Följande datamodell skapad i Vertabelo visar huvudtabellerna.




Datatyper:Vilka är domänerna för tillåtna värden för en kolumn?

Observera att varje kolumn har en datatyp (varchar, heltal, datum, boolean) för att indikera vilken typ av värden som kan tilldelas kolumnen. Till exempel kolumnen smoke på bordet room är booleskt datatyp, vilket betyder att endast sant eller falskt är tillåtna värden.

Primära nycklar:personnummer för varje post

Varje tabell bör ha en kolumn (eller fler än en) som fungerar som en identifierare för varje post i tabellen. Den här kolumnen kallas primärnyckeln (PK), och bästa praxis för databasdesign tyder på att varje tabell måste ha en PK.

Om vi ​​tar en titt på den tidigare Vertabelo-datamodellen kommer vi att se att varje tabell har en kolumn som heter id med en PK-indikator till höger. Dessa id-kolumner bildar PK (som en konvention kallar vi id). kolumnen PK).

Ett viktigt koncept, kanske uppenbart för många läsare, är att en PK-kolumn inte kan ha dubblerade värden. Med andra ord, varje PK-kolumn har en unik begränsning, och varje försök att skapa en ny post med ett duplicerat värde kommer att avvisas med ett fel av databashanteraren.

Fortsätt att upptäcka; Hitta nya databasobjekt

En reservation är ett av de mer komplexa elementen att representera i denna datamodell. En bokning kan ha många rum kopplade till sig (till exempel "Jag vill boka ett dubbelrum och ett separat rum med 3 bäddar för mina barn"). Detta affärskrav lägger till fyra saker till vår modell:

En ny tabell: Vi måste skapa en ny tabell som heter room_reserved , där vi lagrar alla rum som hör till en reservation.

Lägg till två referenser: En referens är ett mycket viktigt inslag i en datamodell. En referens beskriver hur en tabell är relaterad till en annan tabell. I vår modell tillhör varje reserverat rum en reservation, så vi kommer att använda en referens för att modellera detta faktum. Denna referens visas grafiskt som en linje som förbinder båda tabellerna.

Dessutom, eftersom varje bokning tillhör en gäst, måste vi skapa en ny referens som länkar guest och reservation tabeller.

Flytta en kolumn: Eftersom vi kan ha flera rum som hör till en bokning måste vi tillåta avbokning per enskilt rum, efter det flyttar vi attribute status från reservation till reserved_room bord.

Den uppdaterade datamodellen visas i följande diagram designat i Vertabelo:



Vad händer med tabellerna som är länkade av en referens?

När vi skapar en referens mellan två tabeller läggs en ny kolumn till i en av tabellerna. Denna nyss tillagda kolumn kallas en främmande nyckel och fungerar som en pekare till den andra tabellen som tillåter anslutningar mellan tabeller. Ta till exempel en titt på följande diagram:

Fig. 1 Tabeller reservation och guest före och efter att en referens lagts till

Fortsätt att upptäcka; Gå efter mer

En punkt som väntar på att modelleras är det faktum att rummen kan användas av vissa gäster under en viss tid. För att representera detta affärsfaktum lade vi till två tabeller:hosted_at och occupied_room .

Observera att varje person som bodde på hotellet kommer att ha en post i hosted_at . Denna post kommer att ha en referens till rummet han/hon ockuperade och till gästen. Det är därför hosted_at har en dubbel hänvisning till guest och occupied_room .

Tabellen occupied_room kommer att ha en post per varje rum som hyrs, på denna post kan vi hitta fälten:check_in och check_out av typ tidsstämpel som anger när hyran börjar och slutar. En tidsstämpeldatatyp lagrar en tidpunkt med godtycklig precision. Varje occupied_room post kommer också att ha en referens till rumsnumret som hyrs och indirekt via hosted_at till gästerna som bodde i detta rum.

Vi har även lagt till tabellen room_type till datamodellen; tanken är att gruppera rummen efter rumskategori eller rumstyp. Till exempel "standard en dubbelsäng", "lyxiga 2 dubbelsängar" kan vara typbeskrivningar. Vi har också ett max_capacity-attribut här.




Övningar: Databasdesign är en disciplin som är lätt att närma sig, men det tar tid att bli en ämnesexpert. Om du gör dina första steg i databasdesign, försök att slutföra den aktuella datamodellen för att tillåta:

  • Om två eller flera gäster delar ett rum, tillåt olika in- och utcheckning för varje gäst.
  • I vissa fall kan hotell ändra konfigurationen av rummen (till exempel från standard en dubbelsäng till lyxiga 2 dubbelsängar). Lägg till de element i datamodellen som representerar dessa konfigurationsändringar och behåll historiken för varje rum.

  1. SQL Server:Dynamisk where-klausul

  2. SQL Server Error 7222:"Endast en SQL Server-leverantör är tillåten i denna instans"

  3. SQLite UNION-operatör

  4. Hämtar XMLA för att analysera kubstruktur