sql >> Database >  >> RDS >> Database

Een gegevensmodel ontwerpen voor een boekingssysteem voor hotelkamers

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.

  1. Invoegen in meerdere tabellen in één query

  2. CodeIgniter MSSQL-verbinding

  3. Leer de MySQL-database gebruiken

  4. Dump een mysql-database naar een back-up met leesbare tekst (CSV) vanaf de opdrachtregel