- •Курсовой проект
- •Содержание
- •Введение
- •1. Анализ предметной области
- •2. Информационная модель предметной области.
- •3. Разработка базы данных с использованием операторов определения объектов
- •4. Создание таблиц в базе данных
- •5. Описание структуры базы данных
- •6. Разработка программного обеспечения для обслуживания базы данных
- •Заключение
- •Список использованной литературы
- •Приложение а (обязательное)
5. Описание структуры базы данных
Составим проекты таблиц, которые будут затем реализованы в выбранной СУБД.
Описание структуры базы данных включает в себя описание таблиц и полей (с ограничениями значений), связей, первичных индексов и т.д.
В нашей базе данных мы выделяем семь таблиц:
Вид абонента
Кварт. абонент
Справочник тарифов
Вид тарифа
Зона
Абонент - предприятие
Абонент - гостиница
Целостность базы данных обеспечивает механизм связывания таблиц. Первым шагом при этом является определение типа связи. В результате становится возможным создание запросов, форм и отчетов, в которые вводятся данные из нескольких полей сразу. Связь устанавливает отношения между полями разных таблиц, имеющих одинаковые имена. В большинстве случаев с ключевым полем одной таблицы, являющимся уникальным идентификатором каждой записи, связывается внешний ключ другой таблицы.
Таблица «Вид абонента» имеет поля:
- Код – первичный ключ, который однозначно идентифицирует записи таблицы, поле является целым числом, имеет тип char(символьный тип);
- Номер вызываемого телефона – имеет тип char, 60 символов;
- Номер вызывающего телефона – целое поле;
- Вид тарифа – символьный тип данных, 17 символов.
- Город - символьный тип данных, 17 символов
- Вид товарной группы- символьный тип данных, 17 символов
Рисунок 19 - Структура таблицы «Вид абонента»
Рисунок 20 - Заполненная таблица «Вид абонента»
Таблица «Кварт. абонент» имеет поля:
- Номер абонента.– первичный ключ, который однозначно идентифицирует записи таблицы. Поле является целым числом;
- Номер телефона – тип данных int(целое число);
- Ф.И.О. – символьный тип данных, 17 символов;
Рисунок 21 - Структура таблицы «Кварт. абонент»
Рисунок 22 - Заполненная таблица «Кварт. абонент»
Таблица «Справочник тарифов» имеет поля:
- Вид тарифа –первичный ключ, который однозначно идентифицирует записи таблицы. Поле является целым числом;
- Вид абонента – строковое поле, символьный тип данных, 20 символов;
- Номер зоны – символьный тип данных (char), 25 символов;
- Вид абонента – строковое поле, символьный тип данных ,25 символов;
- Стоимость одной минуты – тип данных int(целое число);
Рисунок 23 - Структура таблицы «Справочник тарифов»
Рисунок 24 - Заполненная таблица «Справочник тарифов»
Таблица «Вид тарифа» имеет поля:
- Код вида –первичный ключ, который однозначно идентифицирует записи таблицы. Поле является целым числом;
- Наименование вида – строковое поле, 30 символов.
Рисунок 8- Структура таблицы «Вид тарифа»
Рисунок 25 - Заполненная таблица «Вид тарифа»
Таблица «Абонент - гостиница» имеет поля:
- Наименование – строковое поле, тип данных char, 40 символов;
- Адрес – поле является целым числом;
- Список номеров телефонов - строковое поле, символьный тип данных, 20 символов;
Рисунок 26 - Структура таблицы «Абонент - гостиница»
6. Разработка программного обеспечения для обслуживания базы данных
В нашей базе данных должен существовать удобный пользовательский интерфейс, позволяющий просматривать данные всех основных таблиц, вносить новые данные, а также получать определенную информацию по запросам.
Создадим приложение в Delphi, в котором будем вводить запросы к БД, и будем получать результаты выполнения запросов. Внешний вид разрабатываемого приложения приведен на рисунке 18. На форме установлены следующие компоненты:
- Button - кнопки, при нажатии на которые выполняются определенные действия;
- Edit – поля ввода информации;
- Label – информационные метки;
- Combobox – поля выбора значений из списка;
- Memo – многострочное поле;
- DBGrid – таблица вывода результата запроса;
- ADOConnection – компонент подключения к базе данных;
- ADOQuery – компонент создания запроса к БД;
- DataSource – компонент связи таблиц и запросов с компонентами отображения информации;
- OpenDialog – компонент, который открывает стандартное окно для открытия файла.
Опишем работу с программой. Для каждого запроса создадим файл с расширением *.sql, в котором будет храниться текст запроса. После запуска программы нужно нажать кнопку «Загрузить запрос» и выбрать запрос для загрузки. После выбора файла запрос загрузиться в многострочное поле. Если в запросе есть параметры, то поля для ввода значений параметров станут доступными. После ввода значений параметров нужно нажать кнопку «Изменить запрос». После этого параметры запроса (первоначально загрузятся параметры в виде: «:nd» и др.) будут заменены на введенные значения. Для выполнения запроса нужно нажать кнопку «Выполнить запрос». Результат выполнения запроса будет отображен в таблице. При нажатии на кнопку «Очистить все» все данные будут очищены и окно вернется в начальное состояние. При нажатии на кнопку «Выход» программа будет закрыта.
Далее покажем внешний вид окна программы для каждого запроса.
Рисунок 27 – Кнопочная форма
Сформировать ведомость оплаченных телефонных разговоров
MyQuery1.SQL.Add('SELECT * FROM vid_abonenta WHERE oplata = 1');
Структура запроса:
SELECT `trains`.`nomer` AS `train`, `wagons`.`nomer` AS `wagon`, `type_post`.`description`, `post`.`count_in`
FROM `type_post` INNER JOIN (((`nodes` INNER JOIN `post` ON `nodes`.`id_node` = `post`.`id_node`) INNER JOIN `trains` ON (`trains`.`id_train`= `post`.`id_train`) AND (`nodes`.`id_node` = `trains`.`node_arrival`)) INNER JOIN ` nomer ` ON (`trains`.`id_train`= ` nomer `.`id_train`) AND (`nodes`.`id_node` = ` nomer `.`node_arrival`) AND (`nomer `.`id_nomer` = `post`.`id_ dat `)) ON `type_post`.`id_tpost` = `post`.`id_tpost`
WHERE (`post`.`dat`='2013)
Рисунок 28– Результат работы данного запроса
Выдать счета на оплату переговоров всем абонентам (квартирные) за указанный месяц
Структура запроса:
SELECT `type_post`.`description`
FROM (`nodes` INNER JOIN `trains` ON ( `nodes`.`id_node`=`trains`.`node_arrival`) OR (`nodes`.`id_node`= `trains`.`node_departure`)) INNER JOIN (`type_post` INNER JOIN `post` ON `type_ post`.`dat `= `post`.`id`) ON (`trains`.`id_train`= `post`.`id_train`) AND (`nodes`.`id_node`= `post`.`id_node`)
WHERE (`post`.`dat`='2013') AND (`nodes`.`mesyac`='03')
GROUP BY ` nodes`.`mesyac `
Рисунок 29– Результат работы данного запроса
Выдать счета на оплату переговоров всем абонентам-гостиницам за текущую дату.
Структура запроса:
SELECT `trains`.`nomer` AS `train`, `wagons`.`nomer` AS `wagon`, `type_post`.`description`, `post`.`count_in`
FROM `type_post` INNER JOIN (((`nodes` INNER JOIN `post` ON `nodes`.`id_node` = `post`.`id_node`) INNER JOIN `trains` ON (`trains`.`id_train`= `post`.`id_train`) AND (`nodes`.`id_node` = `trains`.`node_arrival`)) INNER JOIN ` nomer ` ON (`trains`.`id_train`= ` nomer `.`id_train`) AND (`nodes`.`id_node` = ` nomer `.`node_arrival`) AND (`nomer `.`id_nomer` = `post`.`id_ dat `)) ON `type_post`.`id_tpost` = `post`.`id_tpost`
WHERE (`post`.`dat`='2013)
Рисунок 30– Результат работы данного запроса
Сформировать список переговоров заданного абонента за указанный месяц.
Структура запроса:
SELECT `nodes`.`description` AS `node`, ` mesyac `.`nomer` AS ` mesyac`, `type_post`.`description`, `post`.`count_in`
FROM `type_post` INNER JOIN (((`nodes` INNER JOIN `post` ON `nodes`.`id_node` = `post`.`id_node`) INNER JOIN `trains` ON (`trains`.`id_ mesyac`= `post`.`id_ mesyac `) AND (`nodes`.`id_node` = `trains`.`node_arrival`)) INNER JOIN `wagons` ON (`trains`.`id_train`= `wagons`.`id_train`) AND (`nodes`.`id_node` = `wagons`.`node_arrival`) AND (`wagons`.`id_wagon` = `post`.`id_nomer`)) ON `type_post`.`id_mesyac` = `post`.`id_ mesyac t`
WHERE (`trains`.`nomer` ='35') AND (`post`.`dat`='2013)
Рисунок 31– Результат работы данного запроса