3. Нормализация Первая нормальная форма требует:
простую структуру таблиц;
в таблицах не должно быть одинаковых по смыслу полей;
в таблице не должно быть составных полей;
в таблице не должно быть одинаковых записей.
Рассмотрим выполнение требований первой нормальной формы к каждой таблице.
В каждой таблице информация предоставляется в виде совокупности строк и столбцов.
В каждой таблице отсутствуют одинаковые по смыслу поля. При рассмотрении каждой таблицы в отдельности мы видим, что информация, содержащаяся в каждом из столбцов, различна. Например, очевидно, что один актер может играть только одну роль в фильме, или данный фильм может быть лишь одного жанра.
В таблице «Фильм» есть поле "Актеры", которое является составным, поэтому необходимо заменить его полем "Актер", чтобы можно было искать фильм по одному актеру.
Двух полностью одинаковых строк ни в одной таблице не должно быть. В каждой из таблиц есть поля, которые уникальны и не повторяются. Например, совокупность полей "Название фильма" и "Актер" в таблице "Фильм".
Рис. 2. Первая нормальная форма (1НФ)
Благодаря преобразованиям, мы видим, что структура приведена к первой нормальной форме.
5
Вторая нормальная форма требует, чтобы таблицы были приведены к первой нормальной форме и чтобы все поля каждой таблицы зависели от первичного ключа. Первичный ключ должен однозначно определять запись и не быть избыточным. Также, мы должны убедиться в том, чтобы внутри каждой из сущностей не было внутренних взаимосвязей между характерными группами с целью уменьшения избыточности.
Определение первичных ключей:
В таблице "Фильм" в качестве первичного ключа можно выбрать совокупность полей "Название фильма" и "Актер". В таблице "Сеансы" первичным ключом является совокупность полей "Дата" и "Начало", так как они однозначно определяют запись. В таблице "Свободные места" в качестве первичного ключа можно выбрать совокупность полей "Место", "Ряд", "Дата", "Начало", а в таблице "Продажа" первичным ключом является "Название фильма", так как расчет прибыли ведется по одному конкретному фильму.
Рис.3. Выделение первичных ключей (PK)
6
Анализ смысловых зависимостей:
В таблице "Фильм" поле "Название фильма" определяет атрибуты фильма, такие как "Жанр", "Продолжительность ", "Год выпуска” и т.д., так как фильму с таким названием могут соответствовать только такие характеристики, а поле "Актер" не определяется, поэтому нужно выделить новую таблицу.
В таблице "Сеансы" совокупность полей "Дата" и "Начало" однозначно определяют "Название фильма", "Окончание", "Цену за билет " и "Продолжительность", так как в кинотеатре имеется лишь один зал, в котором за сутки в одно время может быть показан лишь один фильм. Цена за билет в данном случае зависит не от фильма, а от того времени, в которое этот фильм показывается в разные дни. Продолжительность сеанса не совпадает с продолжительностью фильма, так как в кинотеатре имеется время рекламы, технических задержек и т.п. В таблице "Свободные места" поля: "Начало", "Дата", "Ряд", "Место" - являются первичными ключами, а поле "Название фильма" зависит не от всего первичного ключа, а лишь от его части, поэтому следует выделить новую таблицу.
Рис.4. Анализ смысловых зависимостей
Как мы видим между таблицами "Продажа" и "Фильм", а также между таблицами "Без названия" и "Сеансы" связь один к одному, следовательно по правилам нормализации их необходимо объединить в одну.
Так же в ходе приведения ко второй нормальной форме выделим дополнительные таблицы: "Код страны", "Код жанра". Эти таблицы упростят работу с данными.
7
Рис.5. Вторая нормальная форма (2НФ)
Третья нормальная форма требует, чтобы таблицы были приведены ко второй нормальной форме, и чтобы между не ключевыми полями таблицы не было транзитивных зависимостей, то есть, чтобы значение любого поля, не входящего в состав первичного ключа не зависело от другого поля, не входящего в первичный ключ.
В таблице "Сеансы" исключим поле "Окончание", так как оно может быть определено через поля "Начало" и "Продолжительность".
Остальные таблицы соответствуют третьей нормальной форме.
Рис.6. Третья нормальная форма (3НФ)
8
