КУРСОВОЕ ПРОЕКТИРОВАНИЕ ПО БАЗАМ ДАННЫХ
ТЕМА: "Телефонная компания"
Одесса 2010
Аннотация
Объектом исследования является развитие навыков проектирования информационных систем и закрепление знаний, полученных за время изучения дисциплины "Базы данных".
Цель работы – разработка и создание базы данных для предметной области Аварийная служба.
Метод исследования – изучение видов деятельности в служба рекламы, составление и отладка программы, для работы с базой данных (программа написана на языке С++).
Содержание
Введение
1. Анализ предметной области
1.1 Рабочие цели системы
1.2 Этапы проектирования БД
1.3 Концептуальная модель
2. Преобразование модели ER в реляционную модель
3. Запросы к базе данных системы
4. Описание групп пользователей ИС
5. Текст программы
Заключение
Список литературы
Введение
Цель работы: является развитие навыков проектирования информационных систем и закрепление знаний, полученных за время изучения дисциплины "Базы данных".
Задание: предметная область "Реклама в коммерческом издании". Возможные виды деятельности: учет клиентов с возможными льготами; учет совершенных ими заказов по различным направлениям; расчет стоимости заказа с учетом типа, даты продолжительности; оплата клиентами услуг.
1. Анализ предметной области
1.1 Рабочие цели системы
Согласно заданию, программный продукт должен фиксировать такие данные как:
- клиентов с возможными льготами;
- заказклиентов по различным типам;
- стоимость заказа с учетом типа, даты и продолжительности;
- оплата клиентом услуг.
В связи с этим были сформированы следующие таблицы в базе данных:
Клиенты;
Услуги;
Звонки;
Льготы.
А также таблицы, связывающие данные таблицы.
Так же ПП должен выполнять следующие функции:
Вывод списка услуг клиента;
Вывод списка заказов клиента;
Вывод списка клиентов по первым буквам;
Вывод списка заказов за данный промежуток;
Вывод списка заказов в данный промежуток;
Вывод количества клиентов с данным типом услуги;
Вывод количества неоплаченых счетов;
Вывод количества клиентов по услугам;
Вывод количества клиентов по льготам;
Вывод клиента с наибольшим долгом;
Для каждой льготы определить клиента с наименьшим сроком льготы;
Для каждой услуги определить а клиента с наименьшим сроком услуги;
Вывод клиентов, не имеющих льгот;
Вывод клиентов, не имеющих услуг;
Вывод состояний счетов;
Вывод состояний сроков услуг;
Обновить наличие долга;
Обновить отсутствие долга.
1.2 Этапы проектирования БД
После анализа предметной области были сформированы ранее перечисленные таблицы.
В таблице "Клиент" был выбран первичный ключ "Идентификатор клиента", т.к. данного ключа достаточно для уникального определения каждого клиента, поскольку данные характеризующие клиента не могут повториться дважды.
В таблице "Услуги" и "Льготы" были также выбраны первичные ключи "Идентификатор", т.к. данных полей достаточно для уникального определения данных в таблицах.
При выборе данных таблиц и их связующих таблиц, поля были выбраны с учетом нормализации отношений, т.е. таблицы не содержат избыточное количество повторяющихся данных и не могут привести к различным родам аномалий.
1.3 Концептуальная модель
2. Преобразование модели ER в реляционную модель
Клиент | |||
Поле | Описание | Тип Данных | Комментарий |
id_klient | Идентификационный код клиента | Счетчик | Необходим для уникального определения клиента |
surname | Фамилия клиента | Текстовый | Данные о фамилии клиента |
ab_name | Имя клиента | Текстовый | Данные об имени клиента |
Num | Номер телефона | Числовой | Данные о номера телефона клиента |
bill | Состояние счета клиента | Денежный | Текущее состояние счета клиента |
More Info | Информация о наличие или отсутствии долга | Текстовый | Дополнительные данные о состоянии счета |
Реклама | |||
Поле | Описание | Тип Данных | Комментарий |
id_call | Идентификационный код рекламы | Счетчик | Необходим для уникального определения рекламы |
id_klient | Идентификационный код клиента | Числовой | Необходим для определения клиента |
Data | Дата рекламы | Дата/время | Определение даты рекламы |
time_beg | Время начала звонка | Дата/время | Определение времени начала рекламы |
time_and | Время окончания звонка | Дата/время | Определение времени окончания рекламы |
id_type | Код типа рекламы | Числовой | Определение типа рекламы |
Льгота | |||
Поле | Описание | Тип Данных | Комментарий |
Id_lgot | Идентификационный код льготы | Счетчик | Необходим для уникального определения льготы |
Opisanie | Данные о льготе | Текстовый | Описание льготы |
Stoimost | Процент от стоимости звонка | Числовой | Процент от стоимости рекламы |
Услуга | |||
Поле | Описание | Тип Данных | Комментарий |
Id_service | Идентификационный кодуслуги | Счетчик | Необходим для уникального определения услуги |
Opisanie | Данные об услуге | Текстовый | Описание услуги |
Stoimost | Процент от стоимости звонка | Числовой | Процент от стоимости звонка |
Направление | |||
Поле | Описание | Тип Данных | Комментарий |
Id_type | Идентификационный код типа | Счетчик | Необходим для уникального определения типа |
Opisanie | Данные о типе | Текстовый | Описание типа |
Stoimost | Процент от стоимости рекламы | Числовой | Процент от стоимости рекламы |
Оплата | |||
Поле | Описание | Тип Данных | Комментарий |
id_oplata | Идентификационный код оплаты | Счетчик | Необходим для уникального определения оплаты |
Data | Дата оплаты | Дата/время | Данные о дате внесения оплаты |
Summ | Внесенная сумма | Денежный | Данные о внесенной сумме |
id_ klient | Идентификационный код клиента | Числовой | Определение клиента, выполнившего оплату |
Клиент-льгота | |||
Поле | Описание | Тип Данных | Комментарий |
id_lg_ab | Идентификационный код клиент-льготы | Счетчик | Необходим для уникального определения клиент-льготы |
Data | Дата присвоения льготы | Дата/время | Данные о дате присвоения льготы |
Srok | Дата завершения льготы | Дата/время | Данные о дате завершения льготы |
id_lgot | Идентификационный код льготы | Числовой | Определение присвоенной льготы |
id_klient | Идентификационный код клиента | Числовой | Определение клиента |
Клиент-услуга | |||
Поле | Описание | Тип Данных | Комментарий |
id_ys_ab | Идентификационный код клиент-услугы | Счетчик | Необходим для уникального определения клиент-услугы |
Data | Дата присвоения услуги | Дата/время | Данные о дате присвоения услуги |
Srok | Дата завершения услуги | Дата/время | Данные о дате завершения услуги |
id_lgot | Идентификационный код услуги | Числовой | Определение присвоенной услуги |
id_klient | Идентификационный код клиента | Числовой | Определение клиента |
3. Запросы к базе данных системы
Вывод списка услуг клиента
SELECT A.id_service, A.opisanie, C.surname FROM services AS A, ys_ab AS B, Klient AS C WHERE A.id_service=B.id_service and B.id_klient=C.id_klient and C.surname=(Фамилия_Пользователя)
Выводсписказвонковклиента
SELECT A.id_call, A.data, A.time_beg, A.time_and, C.opisanie, B.surname FROM Call AS A, Klient AS B, Napravlenie AS C WHERE A.id_klient=B.id_klient And A.id_napravlenie=C.id_napravlenie And B.surname=(Фамилия_Пользователя)
Вывод списка клиентов по первым буквам
SELECT * FROM Klient WHERE surname like Первые_буквы%
Вывод списка клиентов по первым цифрам
SELECT * FROM Klient WHERE num like Первые_цифры%
Вывод списка звонков за данный промежуток
SELECT * FROM call WHERE data Between Начальная_Дата and Конечная_Дата
Вывод списка услуг в данный промежуток
SELECT A.Data, A.Srok, B.Surname FROM ys_ab AS A, Klient AS B WHERE A.id_klient=B.id_klient and A.Data between Начальная_Дата and Конечная_Дата
Вывод количества клиентов с данной услугой
SELECT Count(*) FROM services WHERE services.id_service=Идентификато_услуги
Вывод количества отрицательных счетов
SELECTcount(*) FROMKlientWHEREbill<0;
Вывод количества клиентов по услугам
SELECT A.id_service, B.opisanie, Count(*) FROM ys_ab AS A, services AS B WHERE A.id_service=B.id_service GROUP BY A.id_service, B.opisanie;
Выводколичестваклиентовпольготам
SELECT A.id_lgot, B.opisanie, Count(*)FROM lg_ab AS A, lgot AS B WHERE A.id_lgot=B.id_lgot GROUP BY A.id_lgot, B.opisanie;
Выводклиентаснаибольшимдолгом
SELECT * FROM klient AS A WHERE bill<= ALL (select bill from klient );
Выводклиентов, имеющихуслуги
SELECT * FROM klient AS A WHERE A.id_klient =ANY (select B.id_klient from ys_ab AS B);
Для каждой льготы определить клиента с наименьшим сроком льготы
SELECT A.opisanie, B.surname, B.ab_name FROM lgot AS A, klient AS B, lg_ab AS C WHERE A.id_lgot=C.id_lgot AND B.id_klient=c.id_klient AND C.srok<=All (select Srok from lg_ab where lg_ab.id_lgot=A.id_lgot);
Для каждой услуги определить клиента с наименьшим сроком услуги
SELECT A.opisanie, B.surname, B.ab_name FROM services AS A, klient AS B, ys_ab AS C WHERE A.id_service=C.id_service AND B.id_klient=c.id_klient AND C.srok<=All (select Srok from ys_ab where ys_ab.id_service=A.id_service);