- •Введение
- •1 ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
- •1.2 Концептуальная модель данных
- •2 ДАТОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БД
- •2.1 Логическое проектирование
- •2.2 Физическое проектирование
- •2.2.1 Создание базы данных в СУБД PostgreSQL
- •2.2.2 Вопросы безопасности данных
- •3 ОПИСАНИЕ ПРИКЛАДНОЙ ПРОГРАММЫ
- •3.1 Создание функций для работы прикладной программы
- •3.2 Внешний вид и описание работы программы
- •3.3 Поиск и манипулирование данными
- •Заключение
- •Список использованных источников
2 ДАТОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БД
2.1 Логическое проектирование
На основе концептуальной модели данных согласно методологии IDEF1X была спроектирована логическая модель базы данных, представленная на рисунке 2.1. Разработанная структура соответствует третьей нормальной форме [2].
Рисунок 2.1 – Логическая модель базы данных
12
Для описания структуры базы данных был создан глоссарий сущностей, в котором подробно описаны поля базы данных, их типы данных, краткое описание поля и установленные ограничения. Глоссарий представлен в таблице 2.1 − таблице 2.5.
Таблица 2.1 – Описание таблицы базы данных «Гостиничный номер»
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
№ комнаты |
Целочисленный |
Индивидуальный номер |
Первичный ключ |
|
|
гостиничной комнаты |
|
Тип |
Текстовый |
Тип гостиничного номера |
Условие на значение: |
|
|
|
одноместный, |
|
|
|
двухместный |
Цена за ночь |
Числовой |
Цена за одну ночь пребывания в |
Обязательное поле; |
|
|
номере |
условие на значение: |
|
|
|
>=0 |
Описание |
Текстовый |
Описание услуг, |
– |
|
|
предоставляемых с комнатой |
|
|
|
|
Таблица 2.2 – Описание таблицы базы данных «Администратор»
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
ID администратора |
Счетчик от 1 с |
Уникальный |
Первичный ключ |
|
шагом 1 |
идентификатор |
|
|
|
администратор |
|
|
|
а |
|
Фамилия |
Текстовый |
Фамилия |
Обязательное поле; условие на |
|
|
администратор |
значение: первая буква должна |
|
|
а |
быть в диапазоне [A-Я], после |
|
|
|
первой части может идти дефис и |
|
|
|
буквы, начиная с заглавной в |
|
|
|
диапазоне [A-Я] |
Имя |
Текстовый |
Имя |
Обязательное поле; условие на |
|
|
администратор |
значение: первая буква должна |
|
|
а |
быть в диапазоне [A-Я], после |
|
|
|
первой части может идти дефис и |
|
|
|
буквы, начиная с заглавной в |
|
|
|
диапазоне [A-Я] |
Отчество |
Текстовый |
Отчество |
Условие на значение: первая |
|
|
администратор |
буква должна быть в диапазоне |
|
|
а |
[A-Я], после первой части может |
|
|
|
идти дефис и буквы, начиная с |
|
|
|
заглавной в диапазоне [A-Я] |
13
Окончание таблицы 2.2
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
Стаж |
Целочисленный |
Стаж работы |
Условие на значение: >=0 |
|
|
администратор |
|
|
|
а в годах |
|
Дата рождения |
Дата |
Дата рождения |
|
|
|
администратор |
– |
|
|
а |
|
Пол |
Текстовый |
Пол |
Условие на значение: женский, |
|
|
администратор |
|
|
|
мужской |
|
|
|
а |
|
Номер телефона |
Текстовый |
Номер |
Условие на значение: |
|
|
телефона |
|
|
|
соответствует маске +7(999)999- |
|
|
|
администратор |
|
|
|
99-99; уникальный |
|
|
|
а для связи |
|
Электронная почта |
Текстовый |
Электронная |
Условие на значение: |
|
|
почта |
|
|
|
соответствует маске %@%.%; |
|
|
|
администратор |
|
|
|
уникальная |
|
|
|
а для связи |
|
Таблица 2.3 – Описание таблицы базы данных «Гость»
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
ID гостя |
Счетчик от 1 с |
Уникальный |
Первичный ключ |
|
шагом 1 |
идентификатор |
|
|
|
гостя |
|
Фамилия |
Текстовый |
Фамилия гостя |
Обязательное поле; условие на |
|
|
|
значение: первая буква должна |
|
|
|
быть в диапазоне [A-Я], после |
|
|
|
первой части может идти дефис |
|
|
|
и буквы, начиная с заглавной в |
|
|
|
диапазоне [A-Я] |
Имя |
Текстовый |
Имя гостя |
Обязательное поле; условие на |
|
|
|
значение: первая буква должна |
|
|
|
быть в диапазоне [A-Я], после |
|
|
|
первой части может идти дефис |
|
|
|
и буквы, начиная с заглавной в |
|
|
|
диапазоне [A-Я] |
Отчество |
Текстовый |
Отчество гостя |
Условие на значение: первая |
|
|
|
буква должна быть в диапазоне |
|
|
|
[A-Я], после первой части может |
|
|
|
идти дефис и буквы, начиная с |
|
|
|
заглавной в диапазоне [A-Я] |
14
Окончание таблицы 2.3
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
Тип документа |
Текстовый |
Тип документа |
Условие на значение: паспорт, |
|
|
для |
загранпаспорт, свидетельство |
|
|
удостоверения |
|
|
|
личности |
|
Серия документа |
Текстовый |
Серия |
Обязательное поле |
|
|
документа для |
|
|
|
удостоверения |
|
|
|
личности |
|
Номер документа |
Текстовый |
Номер |
Обязательное поле |
|
|
документа для |
|
|
|
удостоверения |
|
|
|
личности |
|
Дата рождения |
Дата |
Дата рождения |
Обязательное поле |
|
|
гостя |
|
Пол |
Текстовый |
Пол гостя |
Условие на значение: женский, |
|
|
|
мужской |
Номер телефона |
Текстовый |
Номер телефона |
Условие на значение: |
|
|
гостя для связи |
соответствует маске +7 (999) |
|
|
|
999-99-99; уникальный |
Электронная почта |
Текстовый |
Электронная |
Условие на значение: |
|
|
почта гостя для |
соответствует маске %@%.%; |
|
|
связи |
уникальная |
Таблица 2.4 – Описание таблицы базы данных «Заявка»
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
ID заявки |
Счетчик от 1 с |
Уникальный |
Первичный ключ |
|
шагом 1 |
идентификатор заявки |
|
ID администратора |
Целочисленный |
Уникальный |
Внешний ключ, ссылается |
|
|
идентификатор |
на таблицу |
|
|
администратора, |
«Администратор» |
|
|
обработавшего заявку |
|
№ комнаты |
Целочисленный |
Индивидуальный |
Внешний ключ, ссылается |
|
|
номер гостиничной |
на таблицу «Гостиничный |
|
|
комнаты |
номер»; нельзя оформить |
|
|
|
заявку на комнату, если |
|
|
|
она занята другой заявкой |
ID гостя |
Целочисленный |
Уникальный |
Внешний ключ, ссылается |
|
|
идентификатор гостя, |
на таблицу «Гость»; |
|
|
подавшего заявку |
должен быть старше 18 |
|
|
|
лет |
15
Окончание таблицы 2.4
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
Количество гостей |
Целочисленный |
Количество гостей, |
Условие на значение: >0 |
|
|
которое будет |
|
|
|
проживать в номере |
|
Дата и время |
Дата и время |
Дата и время |
Обязательное поле |
заселения |
|
заселения гостей в |
|
|
|
гостиничный номер |
|
Дата и время |
Дата и время |
Дата и время |
Обязательное поле, не |
выселения |
|
выселения гостей из |
должно быть раньше даты |
|
|
гостиничного номера |
и времени заселения |
Итоговая цена |
Числовой |
Цена за суммарное |
Условие на значение: >=0 |
|
|
количество прожитых |
|
|
|
в номере ночей |
|
Таблица 2.5 – Описание таблицы базы данных «Заселение»
Имя поля |
Тип данных поля |
Описание |
Ограничения |
|
|
|
|
ID гостя |
Целочисленный |
Уникальный |
Внешний ключ, ссылается на таблицу |
|
|
идентификатор |
«Гость»; ID гостя, заполнившего заявку, |
|
|
заселенного |
должен обязательно быть среди записей; |
|
|
гостя |
количество гостей в записи таблицы |
|
|
|
Заявка должно быть больше или равно |
|
|
|
количеству записей ID гостей, |
|
|
|
привязанных к заявке, в таблице |
|
|
|
Заселение; если гостю 14 и более лет, то |
|
|
|
тип документа может быть только |
|
|
|
паспорт или загранпаспорт, для лиц |
|
|
|
младше 14 лет – свидетельство или |
|
|
|
загранпаспорт |
ID заявки |
Целочисленный |
Уникальный |
Внешний ключ, ссылается на таблицу |
|
|
идентификатор |
«Заявка» |
|
|
заявки на |
|
|
|
проживание |
|
В системе управления базой данных гостиницы реализовано ролевое разграничение доступа. Выделены пять основных ролей: Отельер, Менеджер по бронированию, Гость, HR-менеджер, Администратор БД. Каждая из них обладает определёнными правами и ограничениями. Матрица доступа представлена в таблице 2.6.
16
Таблица 2.6 – Матрица доступа для ролей
|
Отельер |
Менеджер |
HR- |
Админист |
Гость |
|
|
по |
менеджер |
ратор БД |
|
|
|
бронирова |
|
|
|
|
|
нию |
|
|
|
Гостиничный |
SELECT |
SELECT |
SELECT |
SELECT |
SELECT |
номер |
UPDATE |
|
|
INSERT |
|
|
|
|
|
UPDATE |
|
|
|
|
|
DELETE |
|
Администратор |
SELECT |
SELECT |
SELECT |
SELECT |
SELECT только |
|
UPDATE |
|
INSERT |
INSERT |
своего (Фамилия, |
|
(Номер |
|
UPDATE |
UPDATE |
Имя, Номер |
|
телефона, |
|
DELETE |
DELETE |
телефона) |
|
Электрон |
|
|
|
|
|
ная |
|
|
|
|
|
почта) |
|
|
|
|
Гость |
SELECT |
SELECT |
|
SELECT |
SELECT только себя |
|
INSERT |
INSERT |
– |
INSERT |
INSERT только себя |
|
UPDATE |
UPDATE |
UPDATE |
UPDATE только |
|
|
|
||||
|
|
|
|
DELETE |
себя |
Заявка |
SELECT |
SELECT |
SELECT |
SELECT |
SELECT только свои |
|
INSERT |
INSERT |
|
INSERT |
INSERT только свои |
|
UPDATE |
UPDATE |
|
UPDATE |
(№ комнаты, |
|
|
|
|
DELETE |
Количество гостей, |
|
|
|
|
|
Дата и время |
|
|
|
|
|
заселения, Дата и |
|
|
|
|
|
время выселения) |
Заселение |
SELECT |
SELECT |
|
SELECT |
|
|
INSERT |
INSERT |
– |
INSERT |
– |
|
UPDATE |
UPDATE |
UPDATE |
||
|
|
|
|||
|
|
|
|
DELETE |
|
17
