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

Design af en datamodel til et hotelværelsesreservationssystem

Det er almindeligt kendt, at den bedste måde at lære noget på er at praktisere det i et virkeligt scenarie. Det samme gælder naturligvis for databasemodellering. Derfor besluttede jeg i denne artikel at lære dig, hvordan du opretter en simpel databasestruktur ved at tage et lærebogseksempel på et hotelværelsesreservationssystem. Jeg vil vise dig, hvordan du kommer i gang og give dig nogle ideer til at udvide modellen.

Databasemodellering:Discover, Discover, Discover

I denne artikel vil vi designe en datamodel for et hotelværelsesreservationssystem. Vi leder efter en datamodel, hvor vi kan repræsentere informationer om værelserne, gæsterne og de reservationer, der er booket på vores imaginære VERTABELO***** Hotel. Alle disse oplysninger vil blive gemt i tabeller.

Databasemodellering er en cyklisk opdagelsesproces. Vi identificerer først hovedtabellerne og dens attributter. I vores model er hovedtabellerne:room , guest og reservation . Derefter fortsætter vi med at forfine vores tabeller ved at finde deres attributter eller kolonner. For eksempel room tabel har attributter som:rum number , name og smoke flag blandt andre.

Reservation tabel har attributter date_in , date_out , status (annulleret, bekræftet) og made_by (online, personligt, telefon, mail), mens attributterne for tabellen guest er:first_name , last_name og member_since . Måske har du lyst til reservation bordet har brug for flere attributter (som værelsestype, antal senge), vi vil dække dette punkt senere, indtil da, overvej vores reservation tabel ufuldstændig. Følgende datamodel oprettet i Vertabelo viser hovedtabellerne.




Datatyper:Hvad er domænerne med tilladte værdier for en kolonne?

Bemærk, at hver kolonne har en datatype (varchar, heltal, dato, boolean) for at angive, hvilken slags værdier der kan tildeles til kolonnen. For eksempel kolonnen smoke på bordet room er boolesk datatype, hvilket betyder, at kun sand eller falsk er de tilladte værdier.

Primære nøgler:CPR-nummeret for hver post

Hver tabel skal have en kolonne (eller mere end én), der fungerer som en identifikator for hver post i tabellen. Denne kolonne kaldes den primære nøgle (PK), og bedste praksis for databasedesign tyder på, at hver tabel skal have en PK.

Hvis vi tager et kig på den tidligere Vertabelo-datamodel, vil vi se, at hver tabel har en kolonne kaldet id med en PK-indikator til højre. Disse id-kolonner danner PK'en (som en konvention kalder vi id PK kolonnen).

Et vigtigt koncept, måske indlysende for mange læsere, er, at en PK-kolonne ikke kan have duplikerede værdier. Med andre ord har hver PK-kolonne en unik begrænsning, og ethvert forsøg på at oprette en ny post med en duplikeret værdi vil blive afvist med en fejl af databaseadministratoren.

Fortsæt med at opdage; Find nye databaseobjekter

En reservation er et af de mere komplekse elementer at repræsentere i denne datamodel. En reservation kan have mange værelser tilknyttet (f.eks. "Jeg ønsker at reservere et dobbeltværelse og et separat værelse med 3 senge til mine børn"). Dette forretningskrav tilføjer 4 ting til vores model:

En ny tabel: Vi skal oprette en ny tabel kaldet room_reserved , hvor vi opbevarer alle rum, der hører til én reservation.

Tilføj to referencer: En reference er et meget vigtigt element i en datamodel. En reference beskriver, hvordan en tabel er relateret til en anden tabel. I vores model hører hvert reserveret værelse til én reservation, så vi vil bruge en reference til at modellere dette faktum. Denne reference er grafisk repræsenteret som en linje, der forbinder begge tabeller.

Desuden, da hver reservation tilhører én gæst, er vi nødt til at oprette en ny reference, der forbinder guest og reservation tabeller.

Flyt en kolonne: Da vi kan have flere værelser, der hører til en reservation, skal vi tillade annullering pr. individuelt værelse, derefter flytter vi attribute status fra reservation til reserved_room tabel.

Den opdaterede datamodel er vist i følgende diagram designet i Vertabelo:



Hvad sker der med de tabeller, der er forbundet med en reference?

Når vi opretter en reference mellem to tabeller, tilføjes en ny kolonne til en af ​​tabellerne. Denne netop tilføjede kolonne kaldes en fremmednøgle og fungerer som en pegepind til den anden tabel, hvilket tillader forbindelser mellem tabeller. Tag for eksempel et kig på følgende diagrammer:

Fig. 1 Tabeller reservation og guest før og efter tilføjelse af en reference

Fortsæt med at opdage; Gå efter mere

Et punkt, der venter på at blive modelleret, er det faktum, at værelser kan bruges af nogle gæster i en periode. For at repræsentere denne forretningskendsgerning har vi tilføjet 2 tabeller:hosted_at og occupied_room .

Bemærk, at hver person, der boede på hotellet, vil have en registrering i hosted_at . Denne post vil have en reference til det værelse, han/hun besatte, og til gæsten. Det er derfor hosted_at har en dobbelt reference til guest og occupied_room .

Tabellen occupied_room vil have én post for hvert værelse, der lejes, på denne post kan vi finde felterne:check_in og check_out af typen tidsstempel, der angiver, hvornår lejen begynder og slutter. En tidsstempeldatatype gemmer et tidspunkt med vilkårlig præcision. Hvert occupied_room post vil også have en reference til det værelsesnummer, der lejes og indirekte via hosted_at til de gæster, der boede på dette værelse.

Vi tilføjede også tabellen room_type til datamodellen; tanken er at gruppere rummene efter rumkategori eller værelsestype. For eksempel kan "standard dobbeltseng", "luksus 2 dobbeltsenge" være typebeskrivelser. Vi har også en max_capacity-attribut her.




Øvelser: Databasedesign er en let at nærme sig disciplin, men det tager tid at blive fagekspert. Hvis du gør dine første trin med databasedesign, så prøv at fuldføre den aktuelle datamodel for at tillade:

  • Hvis to eller flere gæster deler værelse, tillad forskellig ind- og udtjekning for hver gæst.
  • I nogle tilfælde kan hoteller ændre konfigurationen af ​​værelserne (f.eks. fra standard 1 dobbeltseng til 2 luksusdobbeltsenge). Tilføj elementerne til datamodellen, der repræsenterer disse konfigurationsændringer, og bevar historikken for hvert rum.

  1. konvertering af Epoch-tidsstempel til sql-server (læsbart format for mennesker)

  2. Dupliker rækker i en primær nøgletabel.

  3. Vent Statistics and Query Store

  4. Sådan får du årets dag fra en dato i PostgreSQL