Общоизвестно е, че най-добрият начин да научите нещо е да го практикувате в сценарий от реалния живот. Очевидно същото важи и за моделирането на база данни. Затова в тази статия реших да ви науча как да създадете проста структура на база данни, като вземам пример от учебник за система за резервация на хотелска стая. Ще ви покажа как да започнете и ще ви дам някои идеи за разширяване на модела.
Моделиране на бази данни:Открийте, Открийте, Открийте
В тази статия ще проектираме модел на данни за система за резервиране на хотелска стая. Търсим модел на данни, в който да представим информация за стаите, гостите и резервациите, резервирани в нашия въображаем хотел ВЕРТАБЕЛО*****. Цялата тази информация ще се съхранява в таблици.
Моделирането на бази данни е цикличен процес на откриване. Първо идентифицираме основните таблици и техните атрибути. В нашия модел основните маси са:room
, guest
и reservation
. След това продължаваме да прецизираме нашите таблици, като откриваме техните атрибути или колони. Например room
таблицата има атрибути като:стая number
, name
и smoke
флаг между другото.
Reservation
таблицата има атрибути date_in
, date_out
, status
(отменено, потвърдено) и made_by
(онлайн, лично, телефон, поща), докато атрибутите на таблицата guest
са:first_name
, last_name
и member_since
. Може би се чувствате като reservation
масата се нуждае от повече атрибути (като тип стая, брой легла), ще разгледаме този момент по-късно, а дотогава помислете за нашата reservation
таблицата непълна. Следният модел на данни, създаден във Vertabelo, показва основните таблици.
Типове данни:Какви са домейните на разрешените стойности за колона?
Имайте предвид, че всяка колона има тип данни (varchar, integer, date, boolean), за да посочи какви стойности могат да бъдат присвоени на колоната. Например колоната smoke
на маса room
е булева тип данни, което означава, че разрешените стойности са само true или false.
Първични ключове:социалноосигурителният номер на всеки запис
Всяка таблица трябва да има колона (или повече от една), действаща като идентификатор за всеки запис в таблицата. Тази колона се нарича първичен ключ (PK) и най-добрите практики за проектиране на база данни предполагат, че всяка таблица трябва да има PK.
Ако погледнем предишния модел на данни Vertabelo, ще видим, че всяка таблица има колона, наречена id
с PK индикатор вдясно. Тези колони с идентификатор формират PK (като конвенция ние наричаме id
колоната PK).
Важна концепция, може би очевидна за много читатели, е, че PK колона не може да има дублирани стойности. С други думи, всяка PK колона има уникално ограничение и всеки опит за създаване на нов запис с дублирана стойност ще бъде отхвърлен с грешка от мениджъра на базата данни.
Продължете да откривате; Намерете нови обекти в базата данни
Резервацията е един от по-сложните елементи за представяне в този модел на данни. Една резервация може да има много стаи, свързани с нея (например „Искам да направя резервация за една двойна стая и отделна стая с 3 легла за моите деца“). Това бизнес изискване добавя 4 неща към нашия модел:
Нова таблица: Трябва да създадем нова таблица, наречена room_reserved
, където съхраняваме всички стаи, принадлежащи към една резервация.
Добавете две препратки: Референцията е много важен елемент в модела на данни. Препратка описва как една таблица е свързана с друга таблица. В нашия модел всяка резервирана стая принадлежи към една резервация, така че ще използваме препратка за моделиране на този факт. Тази препратка е представена графично като линия, свързваща двете таблици.
Освен това, тъй като всяка резервация принадлежи на един гост, трябва да създадем нова препратка, свързваща guest
и reservation
маси.
Преместване на колона: Тъй като можем да имаме няколко стаи, принадлежащи към една резервация, трябва да разрешим анулиране на отделна стая, след което преместваме attribute
състояние от reservation
до reserved_room
таблица.
Актуализираният модел на данни е показан на следната диаграма, проектирана във Vertabelo:
Какво се случва с таблиците, свързани с препратка?
Когато създадем препратка между две таблици, една нова колона се добавя към една от таблиците. Тази току-що добавена колона се нарича външен ключ и действа като указател към другата таблица, позволяваща връзки между таблици. Например, разгледайте следните диаграми:
Фиг. 1 reservation
и guest
преди и след добавяне на препратка
Продължете да откривате; Отидете за още
Една точка, която предстои да бъде моделирана, е фактът, че стаите могат да бъдат използвани от някои гости за определен период от време. За да представим този бизнес факт, добавихме 2 таблици:hosted_at
и occupied_room
.
Имайте предвид, че всеки човек, който е отседнал в хотела, ще има запис в hosted_at
. Този запис ще има препратка към стаята, която той/тя е заемал, и към госта. Ето защо hosted_at
има двойна препратка към guest
и occupied_room
.
Таблицата occupied_room
ще има по един запис за всяка стая, която се наема, в този запис можем да намерим полетата:check_in
и check_out
от типа времеви печат, показващ кога започва и приключва наемът. Тип данни за времеви клеймо съхранява момент във времето с произволна точност. Всяка occupied_room
записът също ще има препратка към номера на стаята, която се наема и индиректно чрез hosted_at
на гостите, отседнали в тази стая.
Добавихме и таблицата room_type
към модела на данните; идеята е стаите да се групират по категория или тип стая. Например „стандартно едно двойно легло“, „луксозни 2 двойни легла“ могат да бъдат описания на типа. Тук също имаме атрибут max_capacity.
Упражнения: Проектирането на бази данни е лесна за подход дисциплина, но е необходимо време, за да станете експерт по темата. Ако правите първите си стъпки за проектиране на база данни, моля, опитайте да завършите текущия модел на данни, за да разрешите:
- Ако двама или повече гости споделят стая, разрешете различно настаняване и напускане за всеки гост.
- В някои случаи хотелите могат да променят конфигурацията на стаите (например от стандартно едно двойно легло към луксозно 2 двойни легла). Добавете към модела на данни елементите, които да представят тези промени в конфигурацията, като поддържате историята на всяка стая.