ВВЕДЕНИЕ
Данная курсовая работа посвящена проектированию собственной базы данных. Проектирование охватывает три основные области:
· Проектирование конкретных объектов, которые будут реализованы в базе данных. Для MySQL это такие объекты, как таблицы, представления, и т.д.
· Проектирование конкретных экранных элементов управления, отчетов и программ, которые будут сопровождать данные в базе данных, и обеспечивать редактирование этих данных.
· При определенных обстоятельствах в процессе проектирования также необходимо учитывать конкретную среду или технологию – например, топологию сети, конфигурацию аппаратных средств, использование архитектуры клиент/сервер, параллельной обработки или распределенной архитектуры базы данных.
При проектировании каждой из областей есть свои нюансы, которые разработчику следует учитывать. Например, при проектировании таблиц базы и установлений связи между ними следует позаботиться как о целостности данных базы, так и о совместимости типов при подключении к этой базе разнообразных приложений и клиентов.
|
|
При разработке интерфейса пользователя следует обратить внимание на критерий удобства работы пользователя с базой. Интерфейс должен быть доброжелателен даже к неопытному пользователю.
ЗАДАНИЕ ПО ВЫБРАННОМУ ВАРИАНТУ
Предметная область: "Концертный зал".
Возможные виды деятельности:
· проведение выступлений в рамках гастролей различных исполнителей;
· реклама концертов;
· учет продаж билетов с учетом расценок по категориям мест;
· расчет с исполнителями и персоналом, обеспечивающим проведение концерта.
АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
Определение объектов и связей между ними
Определены следующие объекты в БД:
· Пользователи
· Исполнители
· Жанры
· Концерты
· Реклама
· Тип рекламы
· Билеты
· Тип билета
· Стоимость билета
· Продажа билетов
· Выплаты
· Журнал
Эти объекты имеют следующие информационные характеристики:
· Объект Пользователи – Идентификатор, Имя пользователя, Пароль
· Объект Исполнители – Идентификатор, Название, Стоимость одного выступления
· Объект Жанры – Идентификатор, Наименование
· Объект Концерты – Идентификатор, Дата концерта, Идентификатор исполнителя
· Объект Реклама – Идентификатор, Идентификатор концерта, Дата начала провидения рекламы, Дата конца провидения рекламы
· Объект Тип рекламы – Идентификатор, Наименование
· Объект Билеты – Идентификатор, Тип билета, Количество билетов данного типа, Цена за 1 билет
· Объект Тип билета – Идентификатор, Наименование
|
|
· Объект Стоимости билета – Идентификатор концерта, Идентификатор типа билета, Цена за 1 билет
· Объект Продажа билетов – Идентификатор, Идентификатор концерта, Идентификатор билета, Количество купленных билетов
· Объект Выплаты – Идентификатор, Идентификатор рабочего, Дата выплаты, Сумма выплаты
· Объект Журнал – Идентификатор, Идентификатор пользователя, Дата входа в систему, Действия
Между объектами выявлены следующие взаимосвязи:
· Один пользователь может множество раз входить в систему.
Связь 1:М.
· Несколько исполнителей могут выступить в нескольких концертах. Связь М:N.
· Исполнителей одного жанра может быть несколько. Связь М:1.
· Каждый концерт сопровождается несколькими типами рекламы. Связь М:N.
· Каждая реклама может быть нескольких видов. Связь 1:М.
· На каждый концерт продается множество билетов. Связь 1:М.
· Стоимость билетов зависит от концерта. Связь М:1.
· Билетов одного типа несколько. Связь М:1.
· Проданных билетов разного типа может быть несколько. Связь М:1.
· Один артист может получить несколько выплат. Связь 1:М.
Нормализация отношений
Перечисленные ранее объекты имеют атрибуты, совпадающие с их информационными характеристиками.
· Пользователи – Идентификатор
· Исполнители – Идентификатор
· Жанры – Идентификатор
· Концерты – Идентификатор
· Реклама – Идентификатор
· Тип рекламы – Идентификатор
· Билеты – Идентификатор
· Тип билета – Идентификатор
· Стоимость билета – нет первичных ключей, так как объект является связующим звеном
· Продажа билетов – Идентификатор
· Выплаты – Идентификатор
· Журнал – Идентификатор
Построение концептуальной модели данных
Концептуальная модель данных для предметной области "Концертный зал" представлена в приложении 1. Концептуальная модель представляет объекты предметной области, их атрибуты и взаимосвязи между объектами. Названия объектов написаны прописными буквами. Ключевые атрибуты подчеркнуты.
Построение реляционной модели базы данных
Чтобы получить реляционную модель, следует выполнить такие действия:
· для связей 1:N добавить специальное поле в таблицу со стороны "многие" (внешний ключ), которое служит для ссылки на таблицу, находящуюся со стороны "один"
· для связей М:N необходимо создать дополнительную таблицу, которая содержит первичные ключи таблиц из взаимосвязи, а также дополнительные атрибуты, относящиеся к составному объекту, который определяет эту взаимосвязь.
В результате получена структура базы данных, которая будет физически храниться в памяти компьютера. Реляционная модель базы данных представлена в приложении 2.
ОПИСАНИЕ СПОСОБОВ РЕАЛИЗАЦИИ ЗАПРОСОВ
Добавление записей в журнал
INSERT INTO Journal (Id_Users, Data_journal, Action_journal) VALUES ([идентификатор пользователя], Date(), "В системе");
Какие исполнители не получили зарплату в этом месяце
SELECT Artists.Name_Artists FROM Artists LEFT JOIN Payment ON Artists.Id_Artists = Payment.Id_Artists WHERE (((Artists.Id_Artists) Not In (SELECT Id_Artists FROM Payment))) GROUP BY Artists.Name_Artists;
На какой концерт не осуществлялась продажа билетов на этой недели
SELECT Concert.Name FROM Concert LEFT JOIN SellTikets ON Concert.Id_Concert = SellTikets.Id_Concert WHERE (((Exists (SELECT Id_Concert FROM SellTikets where SellTikets.Id_Concert=Concert.Id_Concert))=False)) GROUP BY Concert.Name;
На скольки концертах выступает каждый артист
SELECT Artists.Name_Artists, Count(Busy_artists.Id_Concert) AS [Count] FROM Artists RIGHT JOIN Busy_artists ON Artists.Id_Artists= Busy_artists.Id_Artists GROUP BY Artists.Name_Artists;
Сколько билетов продано за месяц
SELECT Count(SellTikets.Id_Sell) AS [Count] FROM SellTikets WHERE (((SellTikets.Date_of_SellTickets) Between Date()-30 And Date()));
Сколько билетов продано на каждый концерт
SELECT Concert.Name, Count(SellTikets.Id_Sell) AS [Count] FROM Concert LEFT JOIN SellTikets ON Concert.Id_Concert=SellTikets.Id_Concert GROUP BY Concert.Name;
Сколько выплат произведено за месяц
|
|
SELECT Count(Payment.Id_Payment) AS [Count] FROM Payment WHERE (((Payment.Data_Payment) Between Date()-30 And Date()));
Список артистов участвующих в заданном концерте
SELECT Artists.Name_Artists, Concert.Name FROM Concert LEFT JOIN (Artists RIGHT JOIN Busy_artists ON Artists.Id_Artists = Busy_artists.Id_Artists) ON Concert.Id_Concert = Busy_artists.Id_Concert WHERE (((Concert.Id_Concert) = [Введите № концерта])) ORDER BY Artists.Name_Artists;
Список билетов в номере места, которых есть заданная цифра
SELECT Ticket_type.NameType_tick, Tickets.Reference_number, Tickets.Seat_number FROM Ticket_type LEFT JOIN Tickets ON Ticket_type.Id_Type_tick = Tickets.Id_Type_Tick WHERE (((Tickets.Seat_number) Like [Введите цифту]+"*"));
Список билетов купленных за апрель месяц
SELECT Concert.Name, Tickets.Reference_number, Tickets.Seat_number, SellTikets.Date_of_SellTickets FROM Tickets RIGHT JOIN (Concert LEFT JOIN SellTikets ON Concert.Id_Concert = SellTikets.Id_Concert) ON Tickets.Id_Tickets = SellTikets.Id_Tickets WHERE (((SellTikets.Date_of_SellTickets) Between #4/1/2010# And #5/1/2010#));
Список вхождений в систему за заданное число
SELECT Users.Name_Users, Journal.Data_journal, Journal.Action_journal FROM Users LEFT JOIN Journal ON Users.Id_Users = Journal.Id_Users WHERE (((Journal.Data_journal)=["Введите дату"]));
Список вхождений в систему за неделю
SELECT Users.Name_Users, Journal.Data_journal, Journal.Action_journal FROM Users LEFT JOIN Journal ON Users.Id_Users = Journal.Id_Users WHERE (((Journal.Data_journal) Between Date()-7 And Date()));
Список выплат произведенных для заданного актера
SELECT Artists.Name_Artists, Payment.Prise_Payment FROM Artists LEFT JOIN Payment ON Artists.Id_Artists = Payment.Id_Artists WHERE (((Artists.Id_Artists)=[Введите № артиста])) ORDER BY Payment.Prise_Payment DESC;
Список исполнителей чье имя начинается на заданную букву
SELECT Artists.Name_Artists FROM Artists WHERE (((Artists.Name_Artists) Like [Введите букву]+"*"));
Сумма выплат за апрель месяц
SELECT Artists.Name_Artists, Sum(Payment.Prise_Payment) AS Summa FROM Artists LEFT JOIN Payment ON Artists.Id_Artists=Payment.Id_Artists WHERE (((Payment.Data_Payment) Between #4/1/2010# And #5/1/2010#)) GROUP BY Artists.Name_Artists;
РЕАЛИЗАЦИЯ ОТЧЕТОВ
На скольких концертах выступает каждый артист
Сколько билетов продано на каждый концерт
Список билетов купленных за апрель месяц
Список вхождений в систему за заданное число
Список вхождений в систему за неделю
Список выплат произведенных для заданного актера
ОПИСАНИЕ ИНТЕРФЕЙСА