prosdo.ru
добавить свой файл
1


Техническое задание:
База данных "Фильмы". База данных должна содержать информацию о фильмах (название, жанр, продолжительность, режиссер, год выпуска, производитель, страна и др.) об актерах (фамилия, имя, годы жизни или дата рождения, место рождения, национальность, сыгранные роли, и др.), о производителях (название киностудии, где находится, год образования и др.), о режиссерах (Фамилия, Имя, годы жизни или дата рождения, место рождения, национальность, снятые фильмы, и др.).
Проектирование структуры базы данных:


  1. Уточнение задачи, формулировка требований к системе


1.1 База данных «Фильмы» может быть использована для ведения учета кинолент, которые могут быть просмотрены в зале кинотеатра. Просмотр, поиск сведений по базе данных осуществляется любым пользователем (посетителем, администрацией кинотеатра) для получения подробной информации (название, жанр, продолжительность, актеры, год выпуска, производитель и т.д.) о том или ином кинопроизведении. Сотрудники администрации должны иметь возможность добавлять новые записи о фильмах и удалять старые записи. Клиент должен иметь возможность просматривать каталог фильмов по жанру, по режиссерам, актерам и т.д.
1.2 База данных должна реализовывать следующие функции:

вывод информации о фильмах, актерах, киностудии, режиссерах;

поиск фильма (например, по названию, жанру, актеру и т.д.);

поиск актера (например, по названию фильма, сыгранной роли и т.д.);

поиск киностудии, режиссера (например, по названию фильма);

удаление информации о фильмах;

выбор нужных полей;

вывод списка всех фильмов;

добавление новых фильмов, актеров, информации по киностудии и режиссеру в базу данных;

корректировка информации.

1.3. База данных должна содержать информацию о фильмах (название, жанр, продолжительность, режиссер, год выпуска, производитель, страна и др.) об актерах (фамилия, имя, годы жизни или дата рождения, место рождения, национальность, сыгранные роли, и др.), о производителях (название киностудии, где находится, год образования и др.), о режиссерах (Фамилия, Имя, годы жизни или дата рождения, место рождения, национальность, снятые фильмы, и др.).


1.4. Дополнительные требования к системе: должно быть явное разграничение прав на пользование данной системой в отношении пользователя-посетителя: он не имеет прав на изменение (удаление, добавление) информации в базе данных .
2. Анализ предметной области, определение сущностей, атрибутов, взаимосвязей
Цель этапа – представить информацию базы в виде относительно независимых наборов атрибутов, которые и называются сущностями и которые соответствуют объектам и явлениям предметной области.

Для разрабатываемой базы можно выделить четыре сущности:


  • фильмы (название, жанр, время, режиссер, год выпуска, киностудия, страна) ;

  • актеры (фамилия, имя, годы жизни или дата рождения, место рождения, национальность, сыгранные роли);

  • киностудия (название киностудии, адрес, год образования);

  • режиссер (Фамилия, Имя, годы жизни или дата рождения, место рождения, национальность, снятые фильмы).


Схема сущностей:
Ф
Название

Жанр

Время

Режиссер

Год выпуска

Киностудия

Страна

Фамилия

Имя

Годы жизни или дата рождения

Место рождения

Национальность

Сыгранные роли

Название киностудии

Адрес

Год образования
ильмы Актеры Киностудия


Режиссер


Фамилия

Имя

Годы жизни или дата рождения

Место рождения

Национальность

Снятые фильмы

Связь между сущностями Актеры - Фильмы – 1 ко многим, так как конкретный актер может играть роль в нескольких фильмах. Связь между сущностями Киностудия – Фильмы – 1 ко многим, так как одна киностудия может снимать несколько фильмов. Связь между сущностями Режиссер - Фильмы – 1 ко многим, так как одной записи из таблицы «Режиссер» может соответствовать несколько записей из таблицы «Фильмы».



3. Нормализация
3.1. Первая нормальная форма

После того, как в базе данных выделены основные сущности, ее необходимо нормализовать. Нормализация – это процесс преобразования структуры базы данных, цель которого исключение избыточности данных. Это ключевой этап разработки структуры, и заключается он в приведении структуры базы к третьей нормальной форме (3НФ). Перед тем как база будет приведена к 3НФ, ее приводят к 1НФ и ко 2НФ.

Таблица приведена к 1НФ , если выполнены следующие требования:

А) Таблица имеет простую структуру;

Б) В таблице нет одинаковых по смыслу полей;

В) В таблице нет составных полей;

Г) В таблице нет одинаковых записей.

Структура не должна зависеть от данных, она может полностью разрабатываться и создаваться без учета конкретных значений данных. Составным называют поле, такое, что в процессе работы БД необходимо иметь доступ к частям его значения. Повторяющаяся группа – группа одинаковых по смыслу полей. Главная причина, по которой повторяющиеся группы недопустимы, заключается в том, что при их наличии нарушается один из главных фундаментальных принципов реляционной модели БД – независимость структуры и элементов данных. Изменение состава при наличии повторяющихся групп ведет к необходимости изменять структуру базы.

Сущности были выделены так удачно, что приведение к 1НФ не внесло почти никаких изменений, единственное целесообразно объединить поля «Фамилия» и «Имя» в сущностях «Актеры» и «Режиссер», так как единое поле обеспечит более точную информацию, например, при поиске фильма по конкретному актеру. Структура базы не зависит от конкретных данных. Составных полей нет. Поля ФИО, адрес не являются составными, поскольку в процессе работы БД обращение к частям их значений не потребуется. Повторяющихся групп тоже нет, так как никакие поля не одинаковы по смыслу. В результате приведения сущностей БД к 1НФ, они будут включать в себя следующие поля:




Фамилия Имя

Годы жизни или дата рождения

Место рождения

Национальность

Сыгранные роли
Ф
Название

Жанр

Время

Режиссер

Год выпуска

Киностудия

Страна

Название киностудии

Адрес

Год образования
ильмы Актеры Киностудия


Режиссер


Фамилия Имя

Годы жизни или дата рождения

Место рождения

Национальность

Снятые фильмы


3.2. Вторая нормальная форма
Цель нормализации – исключение избыточности, однако приведение структуры к 1НФ избыточности не уменьшает. Требуется привести структуру ко 2НФ. Для этого необходимо выполнить следующие шаги:


  1. Определить в таблице первичный ключ. Первичный ключ – это поле или группа полей, однозначно идентифицирующая запись, его значение должно быть уникально, т. е. не должно быть записей с одинаковым значением первичного ключа.

  2. Провести анализ смысловых зависимостей между полями таблицы

  3. Разделить таблицу на части в соответствии с выделенными смысловыми зависимостями.

  4. Выполнить дополнительные преобразования структуры, например, вводя семантически незначащие первичные ключи, справочные таблицы и т.д.

Для удобства работы со структурой БД и определения взаимосвязей между сущностями БД введем семантически незначащие первичные ключи. Так для сущности «Фильмы» введем дополнительное поле «Инв_номер», для каждой из сущностей «Актеры» и «Режиссер» введем поле «Таб_номер» и , наконец, для сущности «Киностудия» - поле «Номер киностудии».

В таблице «Фильмы» первичным ключом является поле «Инв_номер», т.к. это поле присваивается для каждого фильма индивидуально и поэтому повторяться не может. В таблицах «Актеры» и «Режиссер» первичными ключами являются их «табельные номера» соответственно, т.к. значения этих полей уникальны. В сущности «Киностудия» первичным ключом является поле «Номер киностудии», все остальные поля таблицы (киностудии, адрес, год образования) зависят от него, т.к. характеризуют конкретную киностудию.


После определения первичных ключей можно установить взаимосвязи между сущностями. Т.к. во всех таблицах вторичные поля зависят только от первичного ключа, нет необходимости выносить какую-либо информацию в отдельные таблицы, единственное нужно создать связующую таблицу между сущностями «Фильмы» и «Актеры», т.к. в одно поле «Актеры» сущности «Фильмы» нельзя разместить несколько значений из таблицы «Актеры» (ведь в одном фильме снимается некоторый состав актеров, а не один человек). В качестве первичного ключа можно ввести дополнительное поле «№ записи». После приведения структуры базы данных ко 2НФ, она будет иметь следующий вид:



3.3. Третья нормальная форма

Теперь следует привести структуру базы данных к 3НФ. Она требует, чтобы в таблицах не имелось транзитивных зависимостей. Другими словами, значение никакого поля не должно выражаться через значения других полей. Если такие поля присутствуют в таблицах, то одно из полей, входящих в транзитивную зависимость, необходимо исключить.

Так в сущности «Режиссер» поле «Снятые фильмы» является избыточной информацией, т.к. она может быть получена в дальнейшем (например, в виде списка записей) при осуществлении пользователем запроса на поиск фильмов по Фамилии Имени режиссера. Т.о. результатом приведения к 3НФ является структура:



4. Проектирование таблиц

Для каждой полученной на этапе нормализации таблицы нужно привести следующую информацию: имя таблицы, список полей. Для каждого поля привести имя поля, выбрать тип и привести все правила целостности для полей и таблиц.


Проектировка таблицы Фильмы:

Имя поля


Тип поля

Правила

Инв_номер

(инвентарный номер)

NUMBER

(численный тип)


PRIMARY KEY

(первичный ключ)

Название


VARCHAR2(50)

NOT NULL

(обязательно для заполнения)

Жанр

VARCHAR2(15)

NOT NULL

(обязательно для заполнения)

Время

NUMBER

NOT NULL

(обязательно для заполнения)

Режиссер

NUMBER


NOT NULL

(обязательно для заполнения)

Является внешним ключом для связи с таблицей «Режиссер»

Год выпуска


NUMBER


NOT NULL

(обязательно для заполнения)

Киностудия

NUMBER


NOT NULL

(обязательно для заполнения)

Является внешним ключом для связи с таблицей «Киностудия»

Страна

VARCHAR2(15)

NOT NULL

(обязательно для заполнения)


Проектировка таблицы Киностудия:

Имя поля


Тип поля

Правила

Номер киностудии


NUMBER

(численный тип)


PRIMARY KEY

(первичный ключ)

Название киностудии


VARCHAR2(50)

NOT NULL

(обязательно для заполнения)

Адрес


VARCHAR2(15)

NOT NULL

(обязательно для заполнения)

Год образования


NUMBER

NOT NULL

(обязательно для заполнения)

Проектировка таблицы Режиссер:

Имя поля

Тип поля

Правила

Таб_номер


NUMBER

(численный тип)


PRIMARY KEY

(первичный ключ)

Фамилия Имя


VARCHAR2(30)

NOT NULL

(обязательно для заполнения)

Годы жизни или дата рождения


VARCHAR2(10)

NOT NULL

(обязательно для заполнения)

Место рождения

VARCHAR2(40)


NOT NULL

(обязательно для заполнения)

Национальность


VARCHAR2(20)


NOT NULL

(обязательно для заполнения)



Проектировка таблицы Актеры:

Имя поля

Тип поля

Правила

Таб_номер


NUMBER

(численный тип)


PRIMARY KEY

(первичный ключ)

Фамилия Имя


VARCHAR2(50)

NOT NULL

(обязательно для заполнения)

Годы жизни или дата рождения


VARCHAR2(15)

NOT NULL

(обязательно для заполнения)

Место рождения


VARCHAR2(40)

NOT NULL

(обязательно для заполнения)

Национальность


VARCHAR2(15)

NOT NULL

(обязательно для заполнения)

Сыгранные роли


VARCHAR2(65)

NOT NULL

(обязательно для заполнения)


Проектировка таблицы Главные роли:

Имя поля


Тип поля

Правила

№записи


NUMBER

(численный тип)


PRIMARY KEY

(первичный ключ)

Инв_номер


NUMBER

(численный тип)


NOT NULL

(обязательно для заполнения)

Является внешним ключом для связи с таблицей «Фильмы»

Таб_номер


NUMBER

(численный тип)


NOT NULL

(обязательно для заполнения)

Является внешним ключом для связи с таблицей «Актеры»

Тип поля «Инв_номер» сущности «Фильмы» – численный, т.к. в это поле будут вводится цифры кода фильма (например, из картотеки), типы полей «Название», «Жанр», «Страна» сущности фильмы; «Название киностудии», «Адрес» сущности «Киностудия»; «Фамилия Имя», «Годы жизни или дата рождения», «Место рождения», «Национальность» сущностей «Режиссер» и «Актеры»; «Сыгранные роли» сущности «Актеры»- строковые, т.к. сюда будет вводится информация, текст, эти поля имеют ограничения на количество вводимых символов (чтобы не перегружать БД лишней информацией) и обязательны для заполнения (т.к. записи с незаполненными (пустыми) полями могут быть утеряны, например при осуществлении запроса по значениям какого-либо поля). Типы полей «Время», «Год выпуска» сущности «Фильмы»; «Год образования» сущности «Киностудия» - численные, т.к. сюда вводятся время и года, поля так же обязательны для заполнения для обеспечения целостности данных. Остальные поля будут численными, т.к. они являются первичными ключами (т.е. это табельные номера, номер киностудии, № записи) и внешними ключами («Режиссер» и «Киностудия» сущности «Фильмы»; «Инв_номер» и «Таб_номер» сущности «Главные роли»), они все обязательны для заполнения, т.к. значения первичного и внешнего ключа не может быть пустыми, иначе нарушается ссылочная целостность БД. Внешние ключи имеют численный тип поля, т.к они должны иметь тот же тип полей, что и первичный ключ, т.е. если бы в качестве первичного ключа использовались строковые поля, то и поля внешнего ключа имели бы такой же тип соответственно.