sql >> Databáze >  >> RDS >> Database

Návrh datového modelu pro systém rezervace hotelových pokojů

Je všeobecně známo, že nejlepší způsob, jak se něco naučit, je procvičit si to v reálném životě. Totéž samozřejmě platí pro modelování databáze. Proto jsem se v tomto článku rozhodl naučit vás vytvořit jednoduchou databázovou strukturu na učebnicovém příkladu rezervačního systému hotelových pokojů. Ukážu vám, jak začít, a dám vám několik nápadů na rozšíření modelu.

Databázové modelování:Objevujte, objevujte, objevujte

V tomto článku navrhneme datový model pro systém rezervace hotelových pokojů. Hledáme datový model, kde bychom mohli reprezentovat informace o pokojích, hostech a rezervacích rezervovaných v našem imaginárním hotelu VERTABELO*****. Všechny tyto informace budou uloženy v tabulkách.

Databázové modelování je cyklický proces zjišťování. Nejprve identifikujeme hlavní tabulky a jejich atributy. V našem modelu jsou hlavní tabulky:room , guest a reservation . Poté pokračujeme v upřesňování našich tabulek objevováním jejich atributů nebo sloupců. Například room tabulka má atributy jako:room number , name a smoke vlajka mimo jiné.

Reservation tabulka má atributy date_in , date_out , status (zrušeno, potvrzeno) a made_by (online, in_person, phone, mail), zatímco atributy tabulky guest jsou:first_name , last_name a member_since . Možná máte chuť na reservation stůl potřebuje více atributů (jako typ pokoje, počet lůžek), tomuto bodu se budeme věnovat později, do té doby zvažte naši reservation tabulka neúplná. Následující datový model vytvořený ve Vertabelo ukazuje hlavní tabulky.




Typy dat:Jaké jsou domény povolených hodnot pro sloupec?

Všimněte si, že každý sloupec má datový typ (varchar, celé číslo, datum, boolean), který označuje, jaké hodnoty lze ke sloupci přiřadit. Například sloupec smoke na stole room je booleovská datový typ, což znamená, že povolené hodnoty jsou pouze true nebo false.

Primární klíče:číslo sociálního zabezpečení každého záznamu

Každá tabulka by měla mít sloupec (nebo více než jeden), který slouží jako identifikátor pro každý záznam v tabulce. Tento sloupec se nazývá primární klíč (PK) a osvědčené postupy pro návrh databáze naznačují, že každá tabulka musí mít PK.

Pokud se podíváme na předchozí datový model Vertabelo, uvidíme, že každá tabulka má sloupec nazvaný id s indikátorem PK vpravo. Tyto sloupce id tvoří PK (jako konvenci nazýváme id sloupec PK).

Důležitým konceptem, možná zřejmým pro mnoho čtenářů, je, že sloupec PK nemůže mít duplicitní hodnoty. Jinými slovy, každý sloupec PK má jedinečné omezení a každý pokus o vytvoření nového záznamu s duplicitní hodnotou bude správcem databází odmítnut s chybou.

Pokračovat v objevování; Najít nové databázové objekty

Rezervace je jedním ze složitějších prvků, které lze v tomto datovém modelu reprezentovat. K jedné rezervaci může být přidruženo mnoho pokojů (např. „Chci provést rezervaci na jeden dvoulůžkový pokoj a samostatný pokoj se 3 lůžky pro své děti“). Tento obchodní požadavek přidává do našeho modelu 4 věci:

Nová tabulka: Musíme vytvořit novou tabulku s názvem room_reserved , kde ukládáme všechny pokoje patřící do jedné rezervace.

Přidejte dvě reference: Odkaz je velmi důležitým prvkem v datovém modelu. Odkaz popisuje, jak jedna tabulka souvisí s jinou tabulkou. V našem modelu každý rezervovaný pokoj patří do jedné rezervace, takže tuto skutečnost použijeme odkaz na model. Tento odkaz je graficky znázorněn jako čára spojující obě tabulky.

Navíc, protože každá rezervace patří jednomu hostovi, musíme vytvořit novou referenci propojující guest a reservation tabulky.

Přesun sloupce: Vzhledem k tomu, že můžeme mít několik pokojů patřících do jedné rezervace, musíme povolit zrušení u jednotlivého pokoje, poté přesuneme attribute stav z reservation do reserved_room tabulka.

Aktualizovaný datový model je zobrazen v následujícím diagramu navrženém ve Vertabelo:



Co se stane s tabulkami propojenými odkazem?

Když vytvoříme odkaz mezi dvěma tabulkami, do jedné z tabulek se přidá jeden nový sloupec. Tento právě přidaný sloupec se nazývá cizí klíč a funguje jako ukazatel na jinou tabulku umožňující propojení mezi tabulkami. Podívejte se například na následující diagramy:

Obr. 1 Stoly reservation a guest před a po přidání reference

Pokračovat v objevování; Přejít na další

Jedním bodem, který bude modelován, je skutečnost, že pokoje mohou být některými hosty po určitou dobu používány. Abychom tuto obchodní skutečnost znázornili, přidali jsme 2 tabulky:hosted_at a occupied_room .

Všimněte si, že každá osoba, která zůstala v hotelu, bude mít záznam v hosted_at . Tento záznam bude obsahovat odkaz na pokoj, který obýval, a na hosta. To je důvod, proč hosted_at má dvojí odkaz na guest a occupied_room .

Tabulka occupied_room bude mít jeden záznam na každý pronajímaný pokoj, na tomto záznamu najdeme pole:check_in a check_out časové razítko typu udávající začátek a konec pronájmu. Datový typ časového razítka ukládá bod v čase s libovolnou přesností. Každá occupied_room záznam bude také obsahovat odkaz na číslo pronajímaného pokoje a nepřímo přes hosted_at pro hosty, kteří zůstali v tomto pokoji.

Přidali jsme také tabulku room_type k datovému modelu; cílem je seskupit pokoje podle kategorie nebo typu pokoje. Například „standardní jedna manželská postel“, „luxusní 2 manželské postele“ mohou být popisy typu. Máme zde také atribut max_capacity.




Cvičení: Návrh databáze je snadno přístupná disciplína, ale stát se odborníkem na dané téma nějakou dobu trvá. Pokud děláte své první kroky k návrhu databáze, zkuste prosím dokončit aktuální datový model, abyste umožnili:

  • Pokud dva nebo více hostů sdílí pokoj, povolte každému hostovi různé přihlášení a odhlášení.
  • V některých případech mohou hotely změnit konfiguraci pokojů (například ze standardní jedné manželské postele na luxusní 2 manželské postele). Přidejte do datového modelu prvky, které budou reprezentovat tyto změny konfigurace, a zachováte tak historii každé místnosti.

  1. Zabezpečení instalace MySQL

  2. proč se mi nepodaří vytvořit tuto tabulku na android SQLite?

  3. .NET / Oracle:Jak programově spustit skript s příkazy DDL

  4. Tipy a triky pomocí protokolování auditu pro MariaDB