Различают два уровня физической модели:
• трансформационную модель;
• модель СУБД.
Трансформационная модель содержит информацию для реализации отдельного проекта, который может быть частью общей ИС и описывать подмножество предметной области. Данная модель позволяет проектировщикам и администраторам БД лучше представить, какие объекты БД хранятся в словаре данных, и проверить, насколько физическая модель удовлетворяет требованиям к ИС.
Модель СУБД автоматически генерируется из трансформационной модели и является точным отображением системного каталога СУБД.
Физический уровень представления модели зависит от выбранного сервера.win поддерживает более 20 реляционных и не реляционных баз данных. По умолчанию ER-win генерирует имена таблиц и индексов по шаблону на основе имен соответствующих сущностей и ключей логической модели, которые в дальнейшем могут быть откорректированы в ручную. Имена таблиц и колонок будут сгенерированы по умолчанию на основе имен сущностей и атрибутов логической модели.
Физическое проектирование базы данных - процесс создания конкретной реализации БД, размещаемой во вторичной памяти (например, накопители типа винчестер) вычислительной машины. В процессе физического проектирования выполняется отображение созданной глобальной логической модели на особенности конкретной СУБД.
Для наиболее распространенных сейчас реляционных СУБД этот процесс можно разбить на следующие этапы и подзадачи:
Этап 1. Перенос глобальной логической модели в среду целевой СУБД:
• проектирование базовых таблиц (с учетом наиболее полного соответствия выбранной логической модели (например, реализация ключей), добавление необходимых структур обслуживания - триггеры, первичные индексы);
• реализация бизнес-правил (зависит от СУБД, лучший вариант - полное использование возможностей СУБД, не переносить бизнес-правила в приложения).
Этап 2. Проектирование физического представления БД:
• анализ транзакций ( выполнение анализа на пропускную способность (число транзакций, выполненных за определенный интервал времени), анализ времени ответа на запрос, отнесение транзакции к важным);
• выбор файловой структуры (для оптимальной файловой организации);
• определение вторичных индексов (для ускорения выполнения транзакций по не ключевым атрибутам и ссылкам);
• анализ необходимости введения контролируемой избыточности данных (процесс обратный нормализации, применяется для повышения производительности системы, только если исчерпаны другие возможности, может привести к снижению гибкости и расширяемости БД, а также усложняет реализацию и обновление данных);
• определение требований к дисковой памяти (в том числе учет требований для обоснования приобретения нового оборудования).
Этап 3. Разработка механизмов защиты:
• разработка пользовательских представлений (видов);
• определение прав доступа.
Этап 4. Организация мониторинга и настройка функционирования системы (требуется для устранения ошибочных проектных решений и изменения требований к системе (например, отказ от более дорогого оборудования, улучшение психологического комфорта пользователей по работе с системой); настройка БД производится фактически постоянно, а не только при первом запуске системы, что позволяет оперативно реагировать на изменения в состоянии системы и требования пользователей; внесение любых изменений должно производиться обдуманно и осторожно, с учетом глобального влияния изменений, для оценки влияния изменений применяют дубликат системы).
Осуществляем проектирование основных объектов базы данных (сущностей) в среду СУБД MS ACCESS 2003 и проектируем схему данных.
ER - диаграмма физической структуры базы данных приведена в приложении 3. Вид и содержание сущностей приведена в приложении 3.
Схема данных приведена в приложении 4.
Вид и содержание сущности приведены в приложении 5.коды, программный модуль для создания сущности:
Сущность - «Броня»:
SQL-код:
create table Броня (
Номера_комнат VARCHAR(20) not null,
Код_корпуса CHAR(10),
Жал_ФИО_клиента VARCHAR(20),
Номер_корпуса VARCHAR(20),
Наименование_организации VARCHAR(20),
ФИО_клиента VARCHAR(20),
Дата_бронирования DATE,
Дата_заселения DATE,
Дата_выселения DATE,
Кол_людей VARCHAR(20),
Скидка VARCHAR(20),PK_БРОНЯ primary key (Номера_комнат));
Сущность - «Жалобы клиентов»:
SQL-код:table Жалобы_клиентов (
ФИО_клиента VARCHAR(20) not null,
Зат_Наименование_организации VARCHAR(20),
Наименование_организации VARCHAR(20),
Дата_жалобы DATE,
Жалоба VARCHAR(50),PK_ЖАЛОБЫ_КЛИЕНТОВ primary key (ФИО_клиента));
Сущность - «Затраты постояльцев» :
SQL-код:table Затраты_постояльцев (
Наименование_организации VARCHAR(20) not null,
ФИО_клиента VARCHAR(20),
Наименование_услуги VARCHAR(20),
Весь_долг_гостинице VARCHAR(20),PK_ЗАТРАТЫ_ПОСТОЯЛЬЦЕВ primary key (Наименование_организации));
Сущность - «Корпуса»:
SQL-код:table Корпуса (
Код_корпуса CHAR(10) not null,
Номер_корпуса VARCHAR(20) not null,
Класс_корпуса VARCHAR(20) not null,
Общее_кол_комнат VARCHAR(20),
Кол_одном_номеров VARCHAR(20),
Кол_двухм_номеров VARCHAR(20),
Кол_трёхм_номеров VARCHAR(20),
Кол_четырёхм_номеров VARCHAR(20),
constraint PK_КОРПУСА primary key (Код_корпуса));
Сущность - «Учёт номеров»:
SQL-код:
create table Учёт_номеров (
Код_номера CHAR(10) not null,
Бро_Номера_комнат VARCHAR(20),
Код_корпуса CHAR(10),
Номер_корпуса VARCHAR(20) not null,
Номера_комнат VARCHAR(20),
Местность_номера VARCHAR(20),
Бронирован VARCHAR(20),PK_УЧЁТ_НОМЕРОВ primary key (Код_номера),AK_IDENTIFIER_1_УЧЁТ_НОМ unique (Номер_корпуса));
SQL-коды, программный модуль для создания связей:
Связь - «Броня/Корпуса»:
SQL-код:
alter table Броняconstraint FK_БРОНЯ_RELATIONS_КОРПУСА foreign key (Код_корпуса)
references Корпуса (Код_корпуса);
Связь - «Броня/Жалобы клиентов»:
SQL-код:
alter table Броня
add constraint FK_БРОНЯ_RELATIONS_ЖАЛОБЫ_К foreign key (Жал_ФИО_клиента)Жалобы_клиентов (ФИО_клиента);
Связь - «Жалобы клиентов/Затраты постояльцев»:
SQL-код:table Жалобы_клиентовconstraint FK_ЖАЛОБЫ_К_RELATIONS_ЗАТРАТЫ_ foreign key (Зат_Наименование_организации)Затраты_постояльцев (Наименование_организации);
Связь - «Учёт номеров/Корпуса»:
SQL-код:
alter table Учёт_номеровconstraint FK_УЧЁТ_НОМ_RELATIONS_КОРПУСА foreign key (Код_корпуса)
references Корпуса (Код_корпуса);
Связь - «Учёт номеров/Броня»:
SQL-код:table
Учёт_номеровconstraint FK_УЧЁТ_НОМ_RELATIONS_БРОНЯ foreign key
(Бро_Номера_комнат)Броня (Номера_комнат);
2. РАЛИЗАЦИЯ БАЗЫ ДАННЫХ
Спроектированная база данных "Информационная система гостиничного
комплекса" создана в СУБД MS ACCESS 2003.
.1 Организация ввода данных в базу данных
Для ввода данных базы данных "Информационная система гостиничного комплекса" разработана экранная форма ввода данных в среде визуального программирования Delphi7.0 с компонентами доступа к БД MS ACCESS - на основе сущности "Броня".
Вид экранной формы "Броня" приведён в приложении 6
.2 Реализация запросов
Реализуем запросы описанные в разделе "Постановка задачи":
Запрос 1:
Получить перечень и общее число фирм, забронировавших места в объеме, не менее указанного, за весь период сотрудничества, либо за некоторый период.
SQL код:Броня.Наименование_организации, Броня.Дата_бронированияБроня(((Броня.Дата_бронирования) Between [Введите первую дату периода] And [Введите вторую дату периода]));
Запрос 2:
Получить перечень и общее число постояльцев, заселявшихся в номера с указанными характеристиками за некоторый период.
SQL код:Броня.ФИО_клиента, Броня.Наименование_организации, Учёт_номеров.Код_номера, Учёт_номеров.Местность_номера, Броня.Дата_заселенияБроня INNER JOIN Учёт_номеров ON Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат(((Броня.Дата_заселения) Between [Введите первую дату периода] And [Введите вторую дату периода]));
Запрос 3:
Получить количество свободных номеров на данный момент.
SQL код:Броня.Номера_комнат, Учёт_номеров.Бронирован, Date() AS Выражение1Броня INNER JOIN Учёт_номеров ON Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат(((Учёт_номеров.Бронирован)="нет"));
Запрос 4:
Получить сведения о количестве свободных номеров с указанными характеристиками.
SQL код:Броня.Номера_комнат, Броня.Броня, Корпуса.Номер_корпуса, Корпуса.Класс_корпуса, Учёт_номеров.Местность_номера(Корпуса INNER JOIN Броня ON Корпуса.Код_корпуса=Броня.Код_корпуса) INNER JOIN Учёт_номеров ON (Корпуса.Код_корпуса=Учёт_номеров.Код_корпуса) AND (Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат)(((Броня.Броня)="нет"));
Запрос 5:
Получить сведения о конкретном свободном номере: в течение какого времени он будет пустовать и о его характеристиках.
SQL код:Учёт_номеров.Бро_Номера_комнат, Учёт_номеров.Бронирован, Учёт_номеров.Местность_номера, Броня.Номер_корпуса, Корпуса.Класс_корпуса(Корпуса INNER JOIN Броня ON Корпуса.Код_корпуса = Броня.Код_корпуса) INNER JOIN Учёт_номеров ON (Корпуса.Код_корпуса = Учёт_номеров.Код_корпуса) AND (Броня.Номера_комнат = Учёт_номеров.Бро_Номера_комнат)BY Учёт_номеров.Бро_Номера_комнат, Учёт_номеров.Бронирован, Учёт_номеров.Местность_номера, Броня.Номер_корпуса, Корпуса.Класс_корпуса(((Учёт_номеров.Бро_Номера_комнат)=[Введите номер свободной коннаты]) AND ((Учёт_номеров.Бронирован)="Нет"));
Запрос 6:
Получить список занятых сейчас номеров, которые освобождаются к указанному сроку.
SQL код:Броня.Номера_комнат, Броня.Броня, Броня.Дата_выселения(Корпуса INNER JOIN Броня ON Корпуса.Код_корпуса=Броня.Код_корпуса) INNER JOIN Учёт_номеров ON (Корпуса.Код_корпуса=Учёт_номеров.Код_корпуса) AND (Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат)(((Броня.Броня)="да") AND ((Броня.Дата_выселения)<=[Введите дату]));
Запрос 7:
Получить данные об объеме бронирования номеров данной фирмой за
SQL код:Броня.Наименование_организации, Броня.Дата_заселения, Броня.Номер_корпуса, Броня.Номера_комнатБроня INNER JOIN Учёт_номеров ON Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат(((Броня.Наименование_организации)=[Введите фирму]) AND ((Броня.Дата_заселения) Between [Введите первую дату] And [Введите вторую дату]));
Запрос 8:
Получить список недовольных клиентов и их жалобы.
SQL код:Жалобы_клиентов.ФИО_клиента, Жалобы_клиентов.Зат_Наименование_организации, Жалобы_клиентов.Жалоба, Жалобы_клиентов.Дата_жалобыЖалобы_клиентов;
Запрос 10:
Получить сведения о постояльце из заданного номера: его счет гостинице за дополнительные услуги, поступавшие от него жалобы, виды дополнительных услуг, которыми он пользовался.
SQL код:Броня.ФИО_клиента, Броня.Наименование_организации, Броня.Номера_комнат, Затраты_постояльцев.Весь_долг_гостинице, Жалобы_клиентов.Жалоба, Затраты_постояльцев.Наименование_услуги((Броня INNER JOIN Учёт_номеров ON Броня.Номера_комнат = Учёт_номеров.Бро_Номера_комнат) INNER JOIN Жалобы_клиентов ON Броня.Номера_комнат = Жалобы_клиентов.Номера_комнат) INNER JOIN Затраты_постояльцев ON Жалобы_клиентов.Код_клиента = Затраты_постояльцев.Код_клиента(((Броня.Номера_комнат)=[Введите номер]));
Запрос 11:
Получить сведения о фирмах, с которыми заключены договора о брони на указанный период.
SQL код:Броня.Наименование_организации, Броня.Скидка, Броня.Дата_бронированияБроня INNER JOIN Учёт_номеров ON Броня.Номера_комнат=Учёт_номеров.Бро_Номера_комнат(((Броня.Дата_бронирования) Between [Введите первую дату] And [Введите вторую дату]));
Запрос 12:
Получить сведения о наиболее часто посещающих гостиницу постояльцах по всем корпусам гостиниц, по определенному зданию.
SQL код:Броня.ФИО_клиента, Броня.Наименование_организации, Броня.Номер_корпуса, Броня.Номера_комнатБроняBY Броня.ФИО_клиента, Броня.Наименование_организации, Броня.Номер_корпуса, Броня.Номера_комнат(((Броня.Номер_корпуса)=[Введите номер корпуса]))BY Броня.ФИО_клиента;
Запрос 13:
Получить сведения о новых клиентах за указанный период.
SQL код:Броня.ФИО_клиента, Броня.Наименование_организации, Броня.Дата_бронирования, Броня.СкидкаБроня(((Броня.Дата_бронирования) Between [Введите первую дату периода] And [Введите вторую дату периода]));
Запрос 14:
Получить сведения о конкретном человеке, сколько раз он посещал гостиницу, в каких номерах и в какой период останавливался, какие счета оплачивал.
SQL код:Броня.ФИО_клиента, Броня.Номера_комнат, Броня.Дата_бронирования, Броня.Дата_заселения, Броня.Дата_выселения, Затраты_постояльцев.Весь_долг_гостинице, Затраты_постояльцев.Наименование_услуги(Броня INNER JOIN Жалобы_клиентов ON Броня.Номера_комнат = Жалобы_клиентов.Номера_комнат) INNER JOIN Затраты_постояльцев ON Жалобы_клиентов.Код_клиента = Затраты_постояльцев.Код_клиента(((Броня.ФИО_клиента)=[Введите фамилию клиента]));
Запрос 14:
Получить сведения о конкретном номере: кем он был занят в определенный
SQL код:Броня.Номера_комнат, Броня.ФИО_клиента, Броня.Наименование_организации, Броня.Дата_заселенияБроня(((Броня.Номера_комнат)=[Введите номер комнаты]) AND ((Броня.Дата_заселения) Between [Введите первую дату периода] And [Введите вторую дату периода]));
Результаты выполнения запросов приведены в приложении 7.
.3 Получение отчёта
Отчёт создан в среде визуального программирования Delphi7.0.
Отчёт получен на основании информации из сущностей: «Броня», «Учёт номеров». Отражает " Броня-учет номеров".
Форма отчёта приведена в приложении 8.
ЗАКЛЮЧЕНИЕ
Можно с большой степенью достоверности утверждать, что большинство приложений, которые предназначены для выполнения хотя бы какой-нибудь полезной работы, тем или иным образом используют структурированную информацию или, другими словами, упорядоченные данные. Такими данными могут быть, например, списки заказов на тот или иной товар, списки предъявленных и оплаченных счетов или список телефонных номеров ваших знакомых. Обычное расписание движения автобусов в вашем городе - это тоже пример упорядоченных данных.
При компьютерной обработке информации упорядоченные каким либо образом данные принято хранить в базах данных - особых файлах, использование которых вместе со специальными программными средствами позволяет пользователю как просматривать необходимую информацию, так и, по мере необходимости, манипулировать ею, например, добавлять, изменять, копировать, удалять, сортировать и т.д.
Таким образом, дать простое определение базы данных можно следующим
образом. База данных - это набор информации, организованной тем, или иным
способом. Пожалуй, одним из самых банальных примеров баз данных может быть
записная книжка с телефонами.
ЛИТЕРАТУРА
Попов В.Б Delphi для школьников: учебно-методическое пособие/В.Б Попов. - М.: Финансы и статистика; ИНФРА-М, 2014.
Гришин Ю.М. Delphi для программистов - М.: Финансы и
статистика; ИНФРА-М, 2011.
ПРИЛОЖЕНИЯ
Приложение 1
ЕR - диаграмма инфологической модели базы банных ”Информационная система
гостиничного комплекса”
Приложение
2
”Информационная система гостиничного комплекса”
Приложение
3
Вид и содержание сущностей базы данных
“Информационная система гостиничного комплекса”
Сущность «Броня»:
Сущность «Жалобы клиентов»:
Сущность «Затраты постояльцев»:
Сущность «Корпуса»:
Сущность «Учёт номеров»: