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.