Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОЯ курсовая.doc
Скачиваний:
20
Добавлен:
11.02.2015
Размер:
2.71 Mб
Скачать

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 – Кнопочная форма

    1. Сформировать ведомость оплаченных телефонных разговоров

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– Результат работы данного запроса

    1. Выдать счета на оплату переговоров всем абонентам (квартирные) за указанный месяц

Структура запроса:

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– Результат работы данного запроса

    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)

Рисунок 30– Результат работы данного запроса

    1. Сформировать список переговоров заданного абонента за указанный месяц.

Структура запроса:

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– Результат работы данного запроса