Проектирование информационной системы для хранения данных о фильмах и кинотеатрах
Содержание
1. Постановка задачи
2. Проектирование информационной системы
2.1 Построение диаграммы вариантов использования
2.2 Диаграмма последовательности действий
2.3 Построение диаграммы классов
3. Проектирование реляционной модели базы данных
4. Мапирование реляционной модели в метамодель
4.1 Построение диаграммы классов для метамодели
4.2 Проектирование метамодели базы данных
5. Логическая реализация Базы данных
6. Физическая реализация Базы данных
6.1 Скрипты
7. Создание выборок
Выводы
Список литературы
Приложение
1.
Постановка задачи
Кинотеатры (информация для зрителей):
фильмы: название, описание, жанр, длительность, популярность,
в каких кинотеатрах показывается, цены на билеты;
кинотеатры: название, адрес, схема проезда, описание, число
мест, акустическая система, формат.
2.
Проектирование информационной системы
2.1
Построение диаграммы вариантов использования
На первом этапе предпроектного исследования выяснено, что
основная задача разрабатываемой системы - сопровождение процесса.
Диаграмма вариантов использования представлена на картинке
ниже:
Рисунок 2.1 - Диаграмма вариантов использования
Как видно из диаграммы, у посетителя есть возможность
заказать билет. При этом у него есть возможность просмотреть каталог фильмов и
список кинотеатров, в которых показывают соответствующий фильм. Либо выбрать из
списка удовлетворяющий критериям кинотеатр, и просмотреть, какие фильмы в нем
показывают.
информационная система база программа
2.2
Диаграмма последовательности действий
Ниже представлена диаграмма последовательности действий:
Рисунок 2.2 - Диаграмма последовательности действий
Через интерфейс можно получить любую интересующую информацию
по фильму или кинотеатру. Выбрав фильм, можно получить всю информацию о нем
(жанр, рейтинг, цену на билет, продолжительность), а так же список кинотеатров,
в которых показывают данный фильм. Из списка можно так же выбрать подходящий
кинотеатр и узнать всю информацию о нем (адрес, название, число мест,
акустическая система, формат экрана).
2.3
Построение диаграммы классов
На рисунке ниже представлена диаграмма классов:
Рисунок 2.3 - Диаграмма классов
Исходя из диаграммы последовательности действий, мы получим 2
класса: Фильм и Кинотеатр. В класс Фильм входят 6 атрибутов, из которых атрибут
ID_фильма является
идентификационным номером фильма. Класс Кинотеатр имеет также 6 атрибутов, в
котором ID_кинотеатра является его идентифицирующим номером. Классы
соединены между собой отношением "Многие ко многим".
3.
Проектирование реляционной модели базы данных
Возьмем за правило считать классы сущностями. Объектной
модели можно сопоставить модели данных из-за постоянного характера классов.
Стойкие классы могут выступать в качестве постоянного хранения данных во время
работы приложения. Следовательно, для всех постоянных классов можно применить утверждение,
что они могут использовать однозначное отображение в сущностях. Этот процесс
называется "Маппирование" (от. англ. Mapping).
Тогда отношения Фильм и Кинотеатр, выявленные на этапе
построения концептуальной модели характеризуются следующими атрибутами
(табл.3.1)
Таблица 3.1 Атрибуты отношения "Фильм"
Атрибут
|
Описание
|
ID_фильма
|
Первичный
ключ
|
Название_фильма
|
Название
фильма
|
Длительность
Жанр Рейтинг Цена билета
|
Длительность
фильма Жанр фильма Рейтинг фильма Цена билета
|
Отношению Фильм соответствует полная ФЗ: ID_фильма → Название
фильма, длительность, жанр, рейтинг, цена билета. Все поля кроме "ID_фильма" не могут
быть первичным ключом.
Таблица 3.2 Атрибуты отношения
"Кинотеатр"
АтрибутОписание
|
|
ID_кинотеатра
|
Первичный ключ
|
Адрес
|
Адрес кинотеатра
|
Название_кинотеатра
Число_мест Акустическая_система Формат_экрана
|
Название
кинотеатра Число мест Акустическая система Формат экрана
|
Отношению Кинотеатр соответствует полная ФЗ: ID_кинотеатра →
адрес, название кинотеатра, число мест, акустическая система, формат экрана.
Все поля кроме "ID_кинотеатра" не могут быть первичным ключом.
Анализ функциональных зависимостей, которые имеют место для
отношений Фильм и Кинотеатр показывает, что они полные. Следовательно,
универсальное отношение Кинотеатр-Фильм нормализовано.
Сущности Фильм и Кинотеатр соединены связью "многие ко
многим" (М: N). Мощность связи многие-ко-многим означает неоднозначность связи
экземпляров сущностей. Для разрешения этой проблемы вводим составную сущность ids. Она состоит из первичных
ключей соединяемых сущностей.
Окончательная реляционная модель базы данных выглядит
следующим образом:
Рисунок 3.1 - Реляционная модель базы данных
4.
Мапирование реляционной модели в метамодель
Классической методикой проектирования баз данных является
создание отдельной таблицы для каждой описываемой моделью данных сущности.
Такой подход хорошо работает для БД с относительно небольшим количеством
описываемых объектов и при несложных и статичных связях между ними. Однако
любое изменение структуры хранимых данных приводит к внесению изменений в
структуру таблиц, отображающих эти данные. Несложная на этапе разработки, эта
операция становится крайне проблематичной при больших объемах данных и при
отсутствии у разработчика непосредственного доступа к БД (например, если она
находится у заказчика).
Одним из основоположников метамодели стал Анатолий Тенцер
[4]. Он описал пять основных тезисов, на которых должна строиться проектируемая
база данных:
. Каждая сущность, информация о которой хранится в БД,
- это объект.
2. Каждый объект уникален в пределах БД и имеет
уникальный идентификатор.
. Объект имеет свойства (строковые, числовые,
временные, перечислимые), которые описывают атрибуты сущности.
. Объекты могут быть связаны между собой произвольным
образом. Связь характеризуется связанными объектами и типом связи.
. Объект может быть хранилищем. В этом случае
допускается хранение в нем других объектов.
Такая структура базы данных не привязана ни к какой
бизнес-модели и позволяет реализовать на этой основе практически любую
бизнес-логику.
4.1
Построение диаграммы классов для метамодели
Исходя из описанных выше утверждений, была спроектирована
диаграмма классов, которая удовлетворяет этим тезисам (рис.4.1).
Как видно из диаграммы классов она состоит из 4 классов:
Типы, Объекты, Атрибуты и Параметры. В каждом классе, кроме класса Параметры,
имеется 3 атрибута, из которых один - это идентификатор данного класса. В
классы Объекты и Атрибуты мигрирует идентификатор из класса Типы.
Класс Параметры не имеет своего идентификатора, но в него мигрируют
идентификаторы из классов Атрибуты и Объекты.
Рисунок 4.1 - Диаграмма классов
4.2
Проектирование метамодели базы данных
Отношения Типы, Объекты, Атрибуты и Параметры, выявленные на
этапе построения концептуальной модели характеризуются следующими атрибутами
(табл.3.1).
Таблица 3.1 Атрибуты отношения "Типы"
АтрибутОписание
|
|
ID_типа_объекта
|
Первичный ключ
|
Название
|
Название типа
|
Описание
|
Описание типа
|
Таблица 3.2 Атрибуты отношения
"Объекты"
АтрибутОписание
|
|
ID_объекта
|
Первичный ключ
|
ID_типа_объекта
|
Внешний ключ
отношения "Типы"
|
Название_объекта
|
Название
объекта
|
Таблица 3.3 Атрибуты отношения
"Атрибуты"
АтрибутОписание
|
|
ID_атрибута
|
Первичный ключ
|
ID_типа_объекта
|
Внешний ключ
отношения "Типы"
|
Название_атрибута
|
Название
атрибута
|
Таблица 3.3 Атрибуты отношения
"Параметры"
АтрибутОписание
|
|
ID_объекта
|
Внешний ключ
отношения "Объекты"
|
ID_отношения
ID_атрибута
|
Показывает
отношение между объектами Внешний ключ отношения "Атрибуты"
|
Текстовое
значение Номерное значение
|
Поле для
текстовых данных Поле для числовых данных
|
Отношение Параметры играет роль связи "Многие ко
Многим", а атрибут ID_отношения показывает эту связь.
5. Логическая
реализация Базы данных
Реализуем таблицу cf_types. Для идентификации записей введем первичный ключ
object_type_id.
Таблица 5.1 Обоснование типов полей таблицы cf_types:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Primary Key
|
Название
|
name
|
VARCHAR2 (50)
|
Название
|
|
Описание
|
description
|
VARCHAR2 (100)
|
Описание
|
|
Реализуем таблицу cf_obj. Для идентификации записей введем первичный ключ
object_id.
Таблица 5.2 Обоснование типов полей таблицы cf_obj:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_объекта
|
object_id
|
NUMBER
|
|
Primary Key
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Foreign Key
|
Название_объекта
|
VARCHAR2 (150)
|
Название
объекта
|
|
Реализуем таблицу cf_attr. Для идентификации записей введем первичный ключ
attr_id.
Таблица 5.3 Обоснование типов полей таблицы cf_attr:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_атрибута
|
attr_id
|
NUMBER
|
|
Primary Key
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Foreign Key
|
Название_атрибута
|
name
|
VARCHAR2 (50)
|
Название
атрибута
|
|
Реализуем таблицу cf_par. Первичных ключей таблица не имеет.
Таблица 5.4 Обоснование типов полей таблицы cf_par:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_объекта
|
object_id
|
NUMBER
|
Номер объекта
|
Foreign Key
|
ID_отношения
|
relation_id
|
NUMBER
|
Номер отношения
|
|
ID_атрибута
|
attr_id
|
NUMBER
|
Номер атрибута
|
Foreign Key
|
Текстовое_значение
|
text_value
|
VARCHAR2 (150)
|
Поле для
текстовых данных
|
|
Номерное_значение
|
number_value
|
NUMBER
|
Поле для
цифровых данных
|
|
Схема базы данных cf_meta была реализована так:
Рисунок 5.1 - Схема базы данных cf_meta
6. Физическая
реализация Базы данных
6.1 Скрипты
Создадим таблицы, согласно схеме указанной выше:
Create table cf_types (_type_id Number NOT
NULL,Varchar2 (50),Varchar2 (100),pk_cf_types primary key
(object_type_id));table cf_attr (_id Number NOT NULL,_type_id Number,Varchar2
(50),pk_cf_attr primary key (attr_id));table cf_obj (_id Number NOT
NULL,_type_id Number,Varchar2 (150),pk_cf_obj primary key (object_id));table
cf_par (_id Number NOT NULL,_id Number,_id Number,_value Varchar2 (150),_value
Number);table cf_attr add Constraint r_12 foreign key (object_type_id)
references cf_types (object_type_id);table cf_obj add Constraint r_11 foreign
key (object_type_id) references cf_types (object_type_id);table cf_par add
Constraint r_14 foreign key (attr_id) references cf_attr (attr_id);
Alter table cf_par add Constraint r_13 foreign key (object_id)
references cf_obj (object_id);
7.
Создание выборок
Задание 1
Вывести список не повторяющихся жанров фильма.
SELECT
DISTINCT text_value FROM cf_par par WHERE attr_id IN (SELECT attr_id FROM
cf_attr WHERE name='genre')
Задание 2
Вывести название фильмов в которых 5-я буква "о"
SELECT namecf_objSUBSTR (name,5,1) ='о'
AND object_type_id IN (SELECT object_type_id FROM cf_types WHERE name LIKE
'Film')
Задание
3
Вывести название фильмов, их продолжительность и жанр,
названия которых состоят из одного или более слов
SELECT obj. name, genre. text_value, dur.
number_valuecf_obj objcf_par genre ON genre. object_id=obj. object_idobj. name
LIKE '% %'obj. object_type_id= (SELECT object_type_id FROM cf_types WHERE
name='Film')genre. attr_id= (SELECT attr_id FROM cf_attr WHERE
name='genre')cf_par dur ON dur. object_id=obj. object_iddur. attr_id= (SELECT
attr_id FROM cf_attr WHERE name='duration')
Задание
4
Вывести название фильма, продолжительность и рейтинг. Цена и
жанр которых описывается следующим набором данных (30.75, 35) и (Ужасы,
Приключения)
obj.
name, genre. text_value, dur. number_value, price. number_valuecf_obj objcf_par
genre ON genre. object_id=obj. object_idobj. object_type_id= (SELECT
object_type_id FROM cf_types WHERE name='Film')genre. text_value IN
('Ужасы','Приключения')cf_par price ON price. object_id=obj. object_idprice.
number_value IN (35,30.75)cf_par dur ON dur. object_id=obj. object_idattr_id=
(SELECT attr_id FROM cf_attr WHERE name='duration')
Задание 5
Вывести список фильмов, которые проходят в кинотеатре Космос
SELECT obj. namecf_obj objcf_par rel ON
rel. relation_id=obj. object_idrel. attr_id IN (SELECT attr_id FROM cf_attr
WHERE name='ids')rel. object_id IN (SELECT object_id FROM cf_obj WHERE
name='Космос')
Задание
6
Вывести список кинотеатров и весь список фильмов их цен,
жанров, продолжительности которые проходят в этих кинотеатрах, отсортированных
по названию кинотеатра
SELECT cin. name, film. name, price.
number_value, genre. text_value, duration. number_valuecf_obj cincf_par par ON
par. object_id=cin. object_idpar. attr_id IN (SELECT attr_id FROM cf_attr WHERE
name='ids')cf_obj film ON film. object_id=par. relation_idcf_par price ON
price. object_id=film. object_idprice. attr_id= (SELECT attr_id FROM cf_attr
WHERE name='price')cf_par genre ON genre. object_id=film. object_idgenre.
attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')cf_par duration ON
duration. object_id=film. object_idduration. attr_id IN (SELECT attr_id FROM
cf_attr WHERE name='duration')BY cin. name
Задание
7
Вывести список фильмов, жанр и цену, цена которых находится в
промежутке от 25 до 30
SELECT film. name, genre. text_value,
price. number_value(SELECT object_id FROM cf_par WHERE number_value BETWEEN 25
AND 30 AND attr_id IN (SELECT attr_id FROM cf_attr WHERE name='price')) ff
JOIN cf_par genre ON genre. object_id=ff.
object_id
AND genre. attr_id= (SELECT attr_id FROM
cf_attr WHERE name='genre')cf_obj film ON film. object_id=ff. object_idcf_par
price ON price. object_id=ff. object_idprice. attr_id= (SELECT attr_id FROM
cf_attr WHERE name='price')
Задание
8
Вывести список названий кинотеатров, их адрес, акустическую
систему, формат экрана, число мест в которых показывают фильм "Метро"
Задание
9
Вывести весь список фильмов находящихся в прокате и всю
информацию по ним.
SELECT film. object_id, film. name, genre.
text_value, duration. number_value, rait. number_value, price.
number_valuecf_obj filmcf_par genre ON genre. object_id=film. object_idcf_par
duration ON duration. object_id=film. object_idcf_par rait ON rait.
object_id=film. object_idcf_par price ON price. object_id=film. object_idfilm.
object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')genre.
attr_id IN (SELECT attr_id FROM cf_attr WHERE name=LOWER ('GENRE'))duration.
attr_id IN (SELECT attr_id FROM cf_attr WHERE name='duration')rait. attr_id IN
(SELECT attr_id FROM cf_attr WHERE name='rait')price. attr_id IN (SELECT
attr_id FROM cf_attr WHERE name='price')
Выводы
В роботе создана база данных, которая хранит данные о фильмах
и кинотеатрах. Для хранения данных использована метамодель. Данная модель
упрощает создание, редактирование и удаление как конкретных записей, так и
целых таблиц, при этом, не повредив структуры данных.
В ходе выполнения курсовой работы была так же разработана
программа для конечных пользователей и посетителей кинотеатров. Используя
строку запроса, они могут получить любую информацию по интересующему их фильму
или кинотеатру, либо узнать в каком кинотеатре какие фильмы показывают, или
наоборот. Это делает процесс работы с базой данных еще более проще и доступным
для любого пользователя, даже того, который никогда не работал с базами данных.
Список
литературы
1. Codd
E.F. Relational completeness of data base sublanguages. - Ibid. 1972, p.65-98.
2. А.
Чекалов. Базы данных: от проектирования до разработки приложений - СПб.:
БХВ-Петербург, 2003. - 384 с.
. Ульман
Дж. Основы систем баз данных /Пер. c англ. М.Р. Когаловского. - М.: Финансы и
статистика, 1983. - 334 с.
. Анатолий
Тенцер. База данных - хранилище объектов - М.: "КомпьютерПресс",
#"510684.files/image007.gif">
Рисунок 1 - Главное меню программы
Рисунок 2 - Меню списка кинотеатров и фильмов в прокате
Рисунок 3 - Запрос по кинотеатру "Космос"
Рисунок 4 - Вывод информации по выбранному фильму
Рисунок 5 - Вывод информации по выбранному кинотеатру