Проектирование базы данных ‘Гостиница’

Курсовая работа

Современная жизнь немыслима без эффективного управления информацией. И для этого используются системы обработки информации, основанные на базах данных (БД).

От данных информационной системы во многом зависит эффективность работы любого предприятия или учреждения.

Упорядоченность учета оказанных услуг очень важна для гостиницы. До сих пор не все фирмы имеют четко отлаженный учет клиентов и оказанных им услуг. Обобщение данных повышает эффективность и упрощает работу, к тому же база данных обеспечивает удобный и быстрый доступ к информации, повышая скорость работы студии.

В процессе проектирования необходимо разработать базу данных для предметной области «Гостиницы», которая автоматизирует деятельность по учёту гостей, номеров, и администраторов, работающих в данной гостинице.

Данная цель реализуется посредством решения конкретных задач:

создание концептуальной модели

проведение нормализации

упрощение концептуальной схемы и создание расчетной

определение целостности БД

разработка удобного пользовательского интерфейса

преобразовать разработанное приложение в MS SQL Server

1. Описание предметной области

Основной задачей является проектирование и разработка приложения для автоматизации регистрации гостиницы. Приложение предусматривает ведение системного каталога, содержащего информацию о гостях, о номерах и оплате номеров. В гостинице работают администраторы, которые регистрируют гостей. При регистрации гостей учитываются Имя, Фамилия гостя, Год рождения, Даты приезда и отъезда, Цель приезда. Гости могут выбрать номер одной из категорий: эконом, комфорт и люкс.

База данных должна хранить информацию: о гостях, о номерах, об оплате. При работе с системой сотрудник должен по необходимости обновлять БД, создавать и выводить на печать выходные документы. При оплате проживания гостю выдается чек, в котором указано номер квитанции, имя, фамилия гостя, код номера, количество дней в номере, сумма и администратор, оформляющий регистрацию.

2. Концептуальное проектирование

1 Объекты и атрибуты

На основании описания предметной области можно выделить следующие объекты и назначить им свойства (табл. 1).

Таблица 1. «Объекты и атрибуты»

объект

атрибут

Ключ

Гостиница

Код_гостиницы Наименование_гостиницы Адрес_гостиницы

Код_гостиницы

Администратор

Код_администратора Код_гостиницы Фамилия_администратора

Код_администратора

Гости

Код_гостя Код_администратора Код_номера Имя Фамилия Год_ рождения Цель_приезда Примечание

Код_гостя

Адрес

Код_гостя Город Улица Дата_регистрации

Код_гостя

Паспорт

Код_гостя Номер_паспорта Дата_выдачи Выдан

Код_гостя

Оплата

Код_гостя код_номера Код_администратора

Номер

Код_номера Число_комнат Этаж ТВ Холодильник Число_мест Категория Балкон Стоимость_за_сутки

Код_номера

2.2 Связи

Описание предметной области позволяет определить связи (табл. 2).

Таблица 2. «Связи»

связь

объекты

показатель кординальности

степень участия

Работают

Гостиница Администратор

1:М

полная полная

Регистрируют

Администратор Гости

1:М

полная полная

Проживают

Гости Адрес

1:1

полная полная

Имеют

Гости Паспорт

1:1

полная полная

Снимают

Гости Номер

М:1

частичная полная

Начисляют

Администратор Оплата

1:М

Частичная частичная

Производят

Гости Оплата

1:1

полная полная

рассчитывается

Номер Оплата

1:1

полная полная

2.3 ER-диаграмма

Рис.1.ER-диаграмма

3. Логическое проектирование

При упрощении концептуальной схемы могут присутствовать следующие

1) объекты и атрибуты

2) бинарные связи типа 1:1 и 1:М

связи типа суперкласс подкласс

3.1 Таблицы и атрибуты

При преобразовании объектов и атрибутов объект переходит в таблицу, атрибуты объекта переходят в атрибуты таблицы.

Таблица 3. Объекты и атрибуты

объект

таблица

атрибуты

первичный ключ

Гостиница

Гостиница

Код_гостиницы Наименование_гостиницы Адрес_гостиницы

Код_гостиницы

Администратор

Администратор

Код_администратора Код_гостиницы Фамилия_администратора

Код_администратора

Гости

Гости

Код_гостя Код_администратора Код_номера Имя Фамилия Год_ рождения Цель_приезда Примечание

Код_гостя

Адрес

Адрес

Код_гостя Город Улица Дата_регистрации

Код_гостя

Паспорт

Код_гостя Номер_паспорта Дата_выдачи Выдан

Код_гостя

Оплата

Оплата

Код_гостя Код_номера Номер_квитанции Администратор Дата_приезда Дата_отъезда

Код_гостя код_номера Код_администратора

Номер

Номер

Код_номера Число_комнат Этаж ТВ Холодильник Число_мест Категория Балкон Стоимость_за_сутки

Код_номера

3.2 Нормализация таблиц

В процессе нормализации рассматриваются различные функциональные зависимости. Функциональные зависимости определяют не текущее состояние БД, а все возможные ее состояния. то есть они отражают те связи между атрибутами, которые присуши реальному объекту, моделируемые в БД.

Функциональная зависимость. Атрибут Y некоторого отношения функционально зависит от X (атрибуты могут быть составными), если в любой момент времени каждому значению X соответствует одно значение Y. Функциональная зависимость обозначается X →Y.

Избыточная функциональная зависимость — это зависимость, заключающая в себе такую информацию, которая может быть получена на основе других зависимостей, имеющихся в базе данных.

Полная функциональная зависимость. Неключевой атрибут функционально полно зависит от составного ключа если он функционально зависит от всего ключа в целом, но не находится в функциональной зависимости от какого-либо из входящих в него атрибутов.

Транзитивная функциональная зависимость. Пусть X, Y, Z — три атрибута некоторого отношения. При этом X → Y и Y → Z, но обратное соответствие отсутствует, т.е. Z -/-> Y и Y -/-> X. Тогда Z транзитивно зависит от X.

Многозначная зависимость. Пусть X. Y, Z — три атрибута отношения R. В отношении R существует многозначная зависимость R.X -» R.Y только в том случае, если множество значений Y. соответствующее паре значений X и Z. зависит только от X и не зависит от Z.

Рассмотри функциональные зависимости по базе данных «Гостиница»:

  • ФЗ 1: Код_гостиницы — Наименование_гостиницы, Адрес_гостиницы;
  • ФЗ 2: Код_администратора- Код_гостиницы, Фамилия_администратора;
  • ФЗ 3: Код_гостя — Код_администратора, Код_номера, Имя, Фамилия, Год_ рождения, Дата_приезда, Дата_отъезда, Цель_приезда, Примечание;
  • ФЗ 4: Код_гостя — Город, Улица, Дата_регистрации;
  • ФЗ 5: Код_гостя — Номер_паспорта, Дата_выдачи, Выдан;
  • ФЗ6: Код_гостя, код_номера, Код_администратора — Номер_квитанции.

ФЗ7: Код_номера — Число_комнат, Этаж, ТВ, Холодильник, Число_мест, Категория, Балкон, Стоимость_за_сутки.

Нормализация позволяет избавиться от избыточности данных, что позволяет осуществлять непротиворечивое и корректное редактирование данных.

Избыточность информации устраняется не столько с целью экономии памяти, сколько для исключения возможной противоречивости хранимых данных и упрощения управления ими.

Использование ненормализованных таблиц может привести к нарушению целостности данных (непротиворечивости информации) в базе данных.

Рассмотрим нормализацию таблиц по БД «Гостиница»

Таблицы ГОСТИНИЦА, АДМИНИСТРАТОР, ГОСТИ, АДРЕС, ПАСПОРТ, ОПЛАТА, НОМЕР находятся в 1НФ, т.к. все атрибуты этих отношений простые (табл.3).

Таблицы ГОСТИНИЦА, АДМИНИСТРАТОР, ГОСТИ, АДРЕС, ПАСПОРТ, ОПЛАТА, НОМЕР находятся во 2НФ, т.к. они находятся в 1НФ и имеют первичные ключи: Код_гостиницы, Код_администратора, Код_гостя, Код_гостя, Код_гостя, Код_гостя, Код_номера, Код_администратора, Код_номера.

Таблицы КЛИЕНТ, ЗАКАЗ, ФИРМА, УСЛУГА, СОТРУДНИК находятся в 3НФ, т.к. они приведены ко 2НФ. и все неключевые атрибуты взаимнонезависимы и полностью зависят от ключа (ФЗ1-ФЗ6).

Гостиница (Код_гостиницы, Наименование_гостиницы, Адрес_гостиницы);

  • Администратор (Код_администратора, Код_гостиницы, Фамилия_администратора);
  • Гости (Код_гостя, Код_администратора, Код_номера, Имя, Фамилия, Год_ рождения, Цель_приезда, Примечание);
  • Адрес : (Код_гостя — Город, Улица, Дата_регистрации);
  • Паспорт (Код_гостя — Номер_паспорта, Дата_выдачи, Выдан);
  • Оплата (Код_гостя, код_номера, Код_администратора — Номер_квитанции, Дата_приезда, Дата_отъезда);
  • Номер (Код_номера — Число_комнат, Этаж, ТВ, Холодильник, Число_мест, Категория, Балкон, Стоимость_за_сутки).

3 Определение целостности данных

При проектировании БД необходимо создать наиболее эффективную структуру данных. Признаками эффективности структуры БД считаются:

  • Обеспечение быстрого доступа к данным в таблицах.
  • Исключение ненужного повторения данных, которое может явиться причиной ошибок при вводе и нерационального использования дискового пространства компьютера.
  • Обеспечение целостности данных таким образом, чтобы при изменении одних объектов автоматически происходило соответствующее изменение других, связанных с ними объектов.

Целостность данных — ограничения на значения, которые могут принимать атрибуты.

Чтобы информация, хранящаяся в базе данных, была однозначной и непротиворечивой, в реляционной модели устанавливаются некоторые ограничительные условия. Ограничительные условия — это правила, определяющие возможные значения данных. Они обеспечивают логическую основу для поддержания корректных значений данных в базе. Такие ограничения целостности позволяют свести к минимуму ошибки, возникающие при обновлении и обработке данных.

Важнейшими ограничениями целостности данных являются:

  • доменная целостность
  • категорийная целостность
  • ссылочная целостность.

3.1 Доменная целостность

Ограничение домена- ограничения НА значения атрибутов из множества значений домена. Если значения атрибута неизвестно, то опция NULL- это отсутствие атрибута.

В таблице «ГОСТИ» дата ПРИЕЗДА меньше, чем дата ОТЪЕЗДА. И при неправильном введении даты база будет сообщать ошибку и попросит проверить данные.

Все остальные атрибуты принимают значения в соответствии с типом данных.

3.3.2 Категорийная целостность

Категорийная целостность- ни одна строка не может быть занесена в базу данных до тех пор, пока не будут определены все атрибуты ее первичного ключа. Это правило называется правилом категорийной целостности и кратко формулируется следующим образом: никакой атрибут первичного ключа строки не может быть пустым.

Первичные ключи: Код гостиницы, Код администратора, Код гостя, Код гостя, Код гостя, Код гостя, Код номера, Код администратора, Код номера..

Все первичные ключи должны быть обязательно заполнены и индексированы.

3.3 Ссылочная целостность

Ссылочная целостность — если две таблицы связаны между собой, то внешний ключ таблицы должен содержать только значения, уже имеющиеся среди значений ключа, по которому осуществляется связь. Если корректность значений внешних ключей не контролируется СУБД, то может нарушиться ссылочная целостность данных

Внешние ключи: код гостиницы, код администратора, код гостя, код, код номера.

Внешние ключи так же не могут быть пустыми.

4 Схема данных

После проведенного анализа и выделении ключевых сущностей предметной области и выявлении связей между ними, была разработана база данных в СУБД MS Access 2007. База данных состоит из 7 таблиц, связи между которыми показаны на рис. 2.

4. Разработка приложения по технологии «Клиент-сервер»

1 Создание БД на SQL Server, Для начала работы необходимо запустить SQL Server Management Studio Express.

Для создания базы данных используется команда create database.database gostinica

Следующим этапом является создание таблиц, задание атрибутов в каждой из них, создание первичных и внешних ключей, установление связей.

Для этого в MS SQL Server существуют следующие основные типы данных:

1. BIT (тип данных SQL: BOOLEAN).

Хранит значения 1, 0 или NULL, которое обозначает «unknown». В одном байте может храниться до 8 значений из столбцов типа BIT таблицы. В еще одном байте можно разместить дополнительные 8 значений типа BIT. Столбцы типа BIT нельзя индексировать.

— CHAR[(n)], CHARACTER[(n)] (тип данных SQL: CHARACTER(n)).Хранит символьные данные фиксированной длины от 1 до 8000 символов. Все неиспользованное место по умолчанию заполняется пробелами. (Автоматическое заполнение пробелами можно отключить.) Тип занимает п байт.

  • DATETIME (тип данных SQL: TIMESTAMP).Хранит значение даты и времени в диапазоне с 01-01-1753 00:00:00 до 31-12-9999 23:59:59. Для хранения требуется 8 байт.

— FLOAT[(n)] (тип данных SQL: FLOAT, FLOAT(n)).Хранит значения с плавающей точкой в диапазоне от-1.79Е + 308 до 1.79Е + 308. Точность, определяемая параметром п, может изменяться в пределах от 1 до 53. Для хранения 7 цифр (и — от 1 до 24) требуется 4 байта. Значения, превышающие 7 цифр, занимают 8 байт.

— IMAGE (тип данных SQL: BLOB).Хранит двоичное значение переменной длины до 2 147 483 647 байт. Этот тип данных часто используется для хранения графики, звука и файлов, таких, как документы Microsoft Word и электронные таблицы Microsoft Excel. Значениями типа IMAGE нельзя свободно манипулировать. Столбцы типа

  • MONEY (тип данных SQL: отсутствует).

    Хранит денежные значения в диапазоне от -922337203685477.5808 до 922337203685477.5807. Значение занимает 8 байт.

  • VARBINARY[(п)] (тип данных SQL: BLOB).

Представляет собой двоичное значение переменной длины, до 8000 байт. Занимаемое место соответствует размеру вставленных данных плюс 4 байта.

— VARCHARf[(n)], CHAR VARYING [(п)], CHARACTER VARYING f(n)J (тип данных SQL: CHARACTER VARYING [(n)]. Хранит символьные данные фиксированной длины размером от 1 до 8000 символов. Занимаемое место равно реальному размеру введенного значения в байтах, а не значению n.

После создания БД в MS SQL Server необходимо создать таблицы. Для этого используем команду:

После создания базы данных следует создать таблицы с помощью команды create table. Для этого введем:

CREATE TABLE [dbo].[ГОСТИНИЦА](

[Код_гостиницы] [int] NOT NULL,

[Наименование_гостиницы] [nvarchar](20) NULL,

[Адрес_гостиницы] [nvarchar](50) NULL)key (Код_гостиницы) references Гостиница(Код _гостиницы),TABLE [dbo].[АДМИНИСТРАТОР](

[Код_администратора] [int] NOT NULL,

[Фамилия_администратора] [nvarchar](20) NULL,

[Код_гостиницы] [int] NULL)key (Код_Администратора) references Администратор(Код_ Администратора),TABLE [dbo].[ГОСТЯ](

[Код_гостя] [int] NOT NULL,

[Имя] [nvarchar](15) NULL,

[Фамилия] [nvarchar](20) NULL,

[Год_рождения] [datetime] NULL,

[Цель_приезда] [nvarchar](20) NULL,

[Примечание] [nvarchar](30) NULL)key (Код _Гостя) references Гости (Код _Гостя),TABLE [dbo].[Адрес](

[Код_гостя] [int] NOT NULL,

[Город] [nvarchar](15) NULL,

[Улица] [nvarchar](25) NULL,

[Дата_регистрации] [datetime] NULL)TABLE [dbo].[НОМЕР](

[Код_номера] [int] NOT NULL,

[Число_комнат] [int] NULL,

[Этаж] [ntext] NULL,

[ТВ] [bit] NULL DEFAULT ((0)),

[Холодильник] [bit] NULL DEFAULT ((0)),

[Число_мест] [int] NULL,

[Категория] [nvarchar](15) NULL,

[Балкон] [bit] NULL DEFAULT ((0)),

[Стоимость_за_сутки] [money] NULL,key (Код _Номера) references Номер(Код _номера),

Первичный ключ обозначается как PRIMARY KEY (имя поля)

Вторичный ключ создается в дочерней таблице следующим образом: FOREIGN KEY (имя поля), REFERENCES имя родительской таблицы (имя поля).

4.2 Заполнение базы данных

Заполним базу данных, используя команду insert.

Заполняем данные в таблицу Гостиница

Insert Гостиница (Код_гостиницы, Наименование_гостиницы, Адрес_гостиницы)values(‘1′,’ StarPalace’, ‘ Москва, ул.Ленина, 44’)

Заполняем данные в таблицу Администратор.

insert Администратор (Код_Администратора,Код_гостиницы, Фамилия_администратора)values(‘1’, ‘1’, ‘ Васильев ‘)Администратор (Код_Администратора,Код_гостиницы, Фамилия_администратора)values(‘2’, ‘1’, ‘ Максимов ‘)Администратор (Код_Администратора,Код_гостиницы, Фамилия_администратора)values(‘3’, ‘1’, ‘ Сергеев ‘)

Заполняем данные в таблицу Гости.

insert Гости (Код_Гостя, Имя, Фамилия, Год_рождения, Цель_приезда, примечание)values(‘1’, ‘ Илья’, ‘Семенов ‘, ‘ 12.03.1976’, ‘Бизнес’ )Гости (Код_Гостя, Имя, Фамилия, Год_рождения, Цель_приезда, примечание)values(‘2’, ‘ Максим’, ‘Петров’, ‘ 12.03.1976’, ‘Туризм’ )Гости (Код_Гостя, Имя, Фамилия, Год_рождения, Цель_приезда, примечание)values(‘3’, ‘Сергей’, ‘Лосов ‘, ‘ 12.03.1976’, ‘Бизнес’ )Гости (Код_Гостя, Имя, Фамилия, Год_рождения, Цель_приезда, примечание)values(‘4’, ‘ Илья’, ‘Петров ‘, ‘ 12.03.1976’, ‘Туризм’ )Гости (Код_Гостя, Имя, Фамилия, Год_рождения, Цель_приезда, примечание)values(‘5’, ‘ Денис’, ‘Семенов ‘, ‘ 12.03.1976’, ‘Бизнес’ )

4.3 Запросы

1. Запрос. Показать какой гость, в каком номере проживает.

 запросы 1

Рис.4. Простой запрос

2. Запрос. Сгруппировать гостей по номеру и по администратору,

 запросы 2

Рис. 5. Запрос с группировкой

3. Запрос. Список гостей, который регистрировал администратор Васильев (Код-администратора 1).

 запросы 3

Рис. 6. Запрос с вычисляемым полем

4 Процедуры

1. Процедура. Определить гостей, у которых цель приезда — бизнес.

 процедуры 1

Вызов процедуры.

 процедуры 2

Рис. 7.Вызов процедуры.

4.5 Триггер

Дата отъезда должна быть больше даты отъезда.

 триггер 1

 триггер 2

Рис. 9. Выполнение триггера

5. Разработка пользовательского интерфейса

Интерфейс пользователя разработан таким образом, что работать в программе было очень легко и просто.

Рис. 10 Схема меню

При запуске программы появляется «Главное меню», где определены следующие пункты меню: НОМЕРА И ГОСТИ, КВИТАНЦИЯ.

Рис выполнение триггера 1

Рис.11. Главная форма

Первый пункт главного меню: НОМЕРА.

При выборе первого пункта, в меню мы видим две кнопки: «ПРАЙСИСТ» и «ПОИСК».

Рис выполнение триггера 2

Рис. 12. Форма номер.

При нажатие на «ПРАЙСЛИСТ», открывается список из всех номеров гостиницы.

Рис выполнение триггера 3

Рис. 13. Прайслист

Рис выполнение триггера 4

Рис. 14. Форма поиск номера

При нажатии на кнопку «ПОИСК ПО КАТЕГОРИИ» появляется запрос на поиск номера по категории.

При нажатии на кнопку «ПОИСК ПО ЧИСЛУ МЕСТ» появляется запрос на поиск номера по числу мест.

Второй пункт меню: ГОСТИ.

При выборе второго пункта, в меню мы видим четыре кнопки: «РЕГИСТРАЦИЯ НОВЫХ ГОСТЕЙ», «СПИСОК ГОСТЕЙ» и «ПОИСК ПО ФАМИЛИИ».

Рис выполнение триггера 5

Рис. 15. Форма ГОСТИ

При нажатии кнопки «РЕГИСТРАЦИЯ НОВЫХ ГОСТЕЙ» появляется форма

Рис выполнение триггера 6

Рис. 16. Форма РЕГИСТРАЦИЯ ГОСТЕЙ

При нажатии кнопки «СПИСОК ГОСТЕЙ» открывается список гостей, снимающих номера.

При нажатии кнопки «КВИТАНЦИЯ», открывается запрос, в котором по коду гостя можно узнать сумму, которую гость должен заплатить за проживание в номере.

При нажатии кнопки «ПОИСК ПО ФАМИЛИИ» появляется запрос на поиск гостей по фамилии.

Третий Пункт меню: КВИТАНЦИЯ.

При нажатии кнопки «КВИТАНЦИЯ», открывается запрос, в котором по коду гостя можно узнать сумму, которую гость должен заплатить за проживание в номере. В форме «КВИТАНЦИЯ» добавлена кнопка «ПЕЧАТЬ», которая позволяет распечатать квитанцию.

Рис выполнение триггера 7

Рис. 17. Форма Квитанция

Заключение

В результате выполнения проекта было разработано приложение на базе клиент-сервер для гостиницы. Данное приложение позволяет оперативно вносить и получать информацию, необходимую для организации работы гостиницы. Основным достоинством созданной базы является простота и удобство использования.

Список литературы

[Электронный ресурс]//URL: https://inzhpro.ru/kursovaya/razrabotka-bazyi-dannyih-gostinitsyi/

1. Бураков П. В., Петров В. Ю. Введение в системы баз данных: учебное пособие. Санкт-Петербург, 2010.

— Грекул, В.И. Проектирование информационных систем: учебник / В.И. Грекул, Г.Н. Денищенко, Н.Л. Коровкина. — М.: Интернет-Университет информационных технологий, 2005. — 304 с.

— Диго, С.М. Создание баз данных в среде СУБД Access: учебное пособие / С.М. Диго. — М.: МЭСИ, 2000.

— интернет-справочник с примерами по языку SQL.(дата последнего посещения: 27.01.2013г. )