- •Введение
- •1 ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
- •1.2 Концептуальная модель данных
- •2 ДАТОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БД
- •2.1 Логическое проектирование
- •2.2 Физическое проектирование
- •2.2.1 Создание базы данных в СУБД PostgreSQL
- •2.2.2 Вопросы безопасности данных
- •3 ОПИСАНИЕ ПРИКЛАДНОЙ ПРОГРАММЫ
- •3.1 Создание функций для работы прикладной программы
- •3.2 Внешний вид и описание работы программы
- •3.3 Поиск и манипулирование данными
- •Заключение
- •Список использованных источников
2.2Физическое проектирование
2.2.1Создание базы данных в СУБД PostgreSQL
Втаблице 2.7 – таблице 2.12 представлено сопоставление логических и физических имен для разработанных таблиц и ролей базы данных.
Таблица 2.7 – Сопоставление логических и физических имен для таблицы «Гостиничный номер»
Логическое имя |
Физическое имя |
|
|
Гостиничный |
hotel_room |
номер |
|
№ комнаты |
room |
|
|
Тип |
room_type |
|
|
Цена за ночь |
one_night_cost |
|
|
Описание |
room_description |
|
|
Таблица 2.8 – Сопоставление логических и физических имен для таблицы «Администратор»
Логическое имя |
Физическое имя |
|
|
Администратор |
manager |
|
|
ID администратора |
manager_id |
|
|
Фамилия |
manager_surname |
|
|
Имя |
manager_name |
|
|
Отчество |
manager_patronymic |
|
|
Стаж |
experience |
|
|
Дата рождения |
date_of_birth |
|
|
Пол |
gender |
|
|
Номер телефона |
phone_number |
|
|
Электронная почта |
|
|
|
18
Таблица 2.9 – Сопоставление логических и физических имен для таблицы «Гость»
Логическое имя |
Физическое имя |
|
|
Гость |
guest |
|
|
ID гостя |
guest_id |
|
|
Фамилия |
guest_surname |
|
|
Имя |
guest_name |
|
|
Отчество |
guest_patronymic |
|
|
Тип документа |
document_type |
|
|
Серия документа |
document_series |
|
|
Номер документа |
document_number |
|
|
Дата рождения |
date_of_birth |
|
|
Пол |
gender |
|
|
Номер телефона |
phone_number |
|
|
Электронная почта |
|
|
|
Таблица 2.10 – Сопоставление логических и физических имен для таблицы «Заявка»
Логическое имя |
Физическое имя |
|
|
Заявка |
request |
|
|
ID заявки |
request_id |
|
|
ID администратора |
manager_id |
|
|
№ комнаты |
room |
|
|
ID гостя |
guest_id |
|
|
Количество гостей |
guest_quantity |
|
|
Дата и время |
check_in_date |
заселения |
|
Дата и время |
check_out_date |
выселения |
|
Итоговая цена |
total_cost |
|
|
19
Таблица 2.11 – Сопоставление логических и физических имен для таблицы «Заселение»
Логическое имя |
Физическое имя |
|
|
Заселение |
check_in |
|
|
ID гостя |
guest_id |
|
|
ID заявки |
request_id |
|
|
Таблица 2.12 – Сопоставление логических и физических имен для ролей
Логическое имя |
Физическое имя |
|
|
Менеджер по |
manager |
бронированию |
|
Гость |
guest |
|
|
Администратор БД |
dbadmin |
|
|
Был написан запрос на создание базы данных «hoteldb». На рисунке 2.2 представлен фрагмент запроса.
Рисунок 2.2 – Создание базы данных
В базе данных с помощью запросов были созданы таблицы, соответствующие глоссарию. На рисунке 2.3 – рисунке 2.7 представлены фрагменты запроса для создания таблиц. Полный запрос представлен в приложении А.
Рисунок 2.3 – Запрос на создание таблицы «Гостиничный номер»
20
Рисунок 2.4 – Запрос на создание таблицы «Администратор»
Рисунок 2.5 – Запрос на создание таблицы «Гость»
Рисунок 2.6 – Запрос на создание таблицы «Заявка»
Рисунок 2.7 – Запрос на создание таблицы «Заселение»
21
Был создан триггер на INSERT или UPDATE для условия «Гость должен быть старше 18 лет» в таблице «Заявка». Триггер извлекает дату рождения гостя из таблицы «Гость» и рассчитывает возраст на данный момент времени. Если полученный результат меньше 18, то триггер возвращает исключение «Гость, подающий заявку, должен быть старше 18 лет.». Полный скрипт триггера представлен в приложении Б.
Также было реализовано ограничение, не дающее заселить в комнату гостей, если она уже занята, с помощью расширения «btree_gist». Полный скрипт ограничения представлен в приложении В.
Все созданные таблицы были заполнены записями для проверки соблюдения установленных ограничений. На рисунке 2.8 – рисунке 2.12 представлены заполненные таблицы, полный скрипт для добавления записей во все таблицы представлен в приложении Г.
Рисунок 2.8 – Заполненная таблица «Гостиничный номер»
Рисунок 2.9 – Заполненная таблица «Администратор»
22
Рисунок 2.10 – Заполненная таблица «Гость»
Рисунок 2.11 – Заполненная таблица «Заявка»
Рисунок 2.12 – Заполненная таблица «Заселение»
23
Была проведена проверка ограничения целостности базы данных. На рисунке 2.13 представлена проверка ограничения «Первичный ключ» на примере поля «ID администратора» таблицы «Администратор».
Рисунок 2.13 – Проверка ограничения «Первичный ключ» для поля «ID администратора» таблицы «Администратор»
На рисунке 2.14 представлена проверка ограничения для поля «Тип» таблицы «Гостиничный номер». Ограничение позволяет задавать только определенные значения для поля («одноместный» и «двухместный»).
Рисунок 2.14 – Проверка ограничения значений для поля «Тип» таблицы «Гостиничный номер»
На рисунке 2.15 представлена проверка ограничения «Обязательное поле» для поля «Фамилия» таблицы «Администратор».
Рисунок 2.15 – Проверка ограничения «Обязательное поле» для поля «Фамилия» таблицы «Администратор»
24
На рисунке 2.16 представлена проверка ограничения для поля «Стаж» таблицы «Администратор». Ограничение позволяет задавать только неотрицательные значения.
Рисунок 2.16 – Проверка ограничения значений для поля «Стаж» таблицы «Администратор»
На рисунке 2.17 представлена проверка ограничения для поля «Имя» таблицы «Гость». Ограничение позволяет задавать только такие значения поля, которые начинаются с заглавной буквы кириллицы, а после первой буквы могут идти дефис и/или буквы, начиная с заглавной буквы кириллицы.
Рисунок 2.17 – Проверка ограничения значений для поля «Имя» таблицы «Гость»
На рисунке 2.18 представлена проверка ограничения «Внешний ключ» для поля «ID администратора» таблицы «Заявка».
Рисунок 2.18 – Проверка ограничения «Внешний ключ» для поля «ID администратора» таблицы «Заявка»
25
На рисунке 2.19 представлена проверка ограничения значений для поля «№ комнаты» таблицы «Заявка». Ограничение не позволяет оформить заявку на комнату, если она уже занята на этот промежуток времени.
Рисунок 2.19 – Проверка ограничения значений для поля «№ комнаты» таблицы «Заявка»
На рисунке 2.20 представлена проверка ограничения значений для поля «ID гостя» таблицы «Заявка». Ограничение не позволяет оформить заявку, если гость младше 18 лет.
Рисунок 2.20 – Проверка ограничения значений для поля «ID гостя» таблицы «Заявка»
На рисунке 2.21 представлена проверка уникальности значений для поля «Номер телефона» таблицы «Гость».
Рисунок 2.21 – Проверка уникальности значений для поля «Номер телефона» таблицы «Гость»
26
