Первая нормальная форма (1НФ)
Характеристики таблицы, находящейся в 1НФ:
1.Нет повторяющихся строк.
2.Строки и столбцы не упорядочены.
3.Нет повторяющихся групп.
Пример
База данных «Студенты», ставящая в соответствие студентам посещаемые ими курсы, содержит следующие поля: № зачетки, Название курса, Преподаватель.
Если 1000 студентов посещают десяток курсов, описание каждого курса и преподаватель встретятся много раз – по одному разу на каждого студента, посещающего этот курс.
Для того чтобы привести базу данных к 1НФ, нужно разделить одну таблицу на две отдельные – таблицу студентов и таблицу курсов.
Вторая нормальная форма (2НФ)
Характеристики таблицы, находящейся в 2НФ:
1.Таблица находится в 1НФ.
2.Каждое поле таблицы функционально полно зависит от первичного ключа.
Это относится только к тем таблицам, которые имеют составной первичный ключ. В качестве первичного ключа выбрана некоторая совокупность полей, и никакое другое поле не может зависеть только от какой-то части первичного ключа. Оно должно зависеть от всей совокупности полей, входящих в первичный ключ.
Пример
База данных «Итоги сессии» включает поля: № зачетки, Код экзамена,
Оценка, Преподаватель, Номер группы. В качестве первичного ключа можно взять комбинацию полей № зачетки и Код экзамена (необходимо знать, кто сдает экзамен и какой экзамен).
Тогда поле Номер группы зависит только от части первичного ключа (от поля № зачетки), следовательно, таблица не будет находиться во 2НФ. Чтобы привести таблицу во 2НФ, необходимо убрать из нее поле Номер группы.
Третья нормальная форма (3НФ)
Характеристики таблицы, находящейся в 3НФ:
1. Таблица находится во 2НФ.
11
2.Каждое поле таблицы нетранзитивно (напрямую) зависит от первичного ключа.
Т. е. ни одно поле не зависит ни от какого другого, кроме как от полей, соответствующих первичному ключу.
Пример
Таблица «Студенты» состоит из полей: ФИО студента, Дата рождения, Адрес, Курс, Факультет, ФИО декана, Специальность декана, № зачетки, Группа.
Если в качестве первичного ключа выбрать № зачетки, то поля ФИО декана и Специальность декана зависят от первичного ключа транзитивно:
ФИО декана через Факультет, а Специальность декана через ФИО декана. Этого не должно быть.
Четвертая нормальная форма (4НФ)
Если в схеме отношений существуют многозначные зависимости, то необходимо привести ее в 4НФ. Нормализация отношения осуществляется с помощью декомпозиции схемы отношений.
На практике 4НФ используется редко, поэтому мы не будем ее рассматривать.
Пример проектирования нормализованной базы данных
Пусть имеется база данных «Сессия», в которой содержатся следующие данные (табл. 1).
Таблица 1
Перечень полей базы данных и их типов
Поле |
Тип данных |
№ зачетки |
Текстовый |
Фамилия |
Текстовый |
Имя |
Текстовый |
Отчество |
Текстовый |
Город |
Текстовый |
Адрес |
Текстовый |
Дата рождения |
Дата/время |
Год поступления |
Числовой |
Номер группы |
Текстовый |
Факультет |
Текстовый |
Поле |
Тип данных |
Декан |
Текстовый |
Вид оценки знаний |
Текстовый |
Дисциплина |
Текстовый |
Дата |
Дата/время |
Преподаватель |
Текстовый |
Должность преподавателя |
Текстовый |
Кафедра |
Текстовый |
Заведующий кафедрой |
Текстовый |
Оценка |
Текстовый |
|
|
Проблемы при работе с такой базой данных:
много времени на ввод повторяющихся данных (при вводе данных о сдаче очередного экзамена или зачета снова нужно вводить все данные про каждого студента);
12
при изменении одних полей (адрес, преподаватель, должность) необходимо изменять все записи, связанные с этим полем;
большое число повторяющихся данных ведет к увеличению объема базы данных и к уменьшению скорости выполнения запросов.
Описанная база данных является ненормированной. Каждый студент сдает несколько сессий, в каждой из которых несколько зачетов и экзаменов. Следовательно, чтобы не было повторяющихся групп, нужно разбить нашу таблицу на три таблицы:
1)сведения о студентах;
2)сведения о зачетах и экзаменах;
3)сведения об итогах сессии.
Для того чтобы не было повторяющихся записей, таблицы должны иметь уникальный индекс (первичный ключ). Пусть в первой таблице «Студенты» в качестве первичного ключа будет поле № зачетки, во второй таблице «Зачеты и экзамены» – поле Код зач/экз. В третью таблицу «Итоги сессии» добавим два поля № зачетки и Код зач/экз для связи с первой и второй таблицами, и в качестве первичного ключа возьмем эти два поля. После того, как мы разделили повторяющиеся объекты и определили ключевые поля в каждой таблице, база данных находится в
1НФ (рис. 2).
|
Студент |
|
|
Итоги сессии |
|
|
|
Зачеты и экзамены |
|
№ зачетки |
|
|
№ зачетки |
|
|
|
Код зач/экз |
|
|
|
|
|
|
|||
|
Фамилия |
|
|
Код зач/экз |
|
|
|
Вид оценки знаний |
|
|
|
|
|
|
|||
|
Имя |
|
|
Дата |
|
|
|
Дисциплина |
|
Отчество |
|
|
Преподаватель |
|
|
|
Семестр |
|
Город |
|
|
Должность преподавателя |
|
|
|
|
|
Адрес |
|
|
Кафедра |
|
|
|
|
|
Дата рождения |
|
|
Заведующий кафедрой |
|
|
|
|
|
Год поступления |
|
|
Оценка |
|
|
|
|
|
Номер группы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Факультет |
|
|
|
|
|
|
|
|
Декан |
|
|
|
|
|
|
|
|
|
|
|
Рис. 2. Первая нормальная форма |
|
|
||
Понятие 2НФ относится только к таблицам, имеющим составной ключ. В нашем случае это касается таблицы «Итоги сессии», имеющей в качестве первичного ключа поля № зачетки и Код зач/экз. Таких полей, которые зависели бы только от одного из поля, входящего в первичный ключ, в этой таблице нет. Следовательно, эта таблица уже находится во 2НФ.
13
Для того чтобы привести базу данных в 3НФ, необходимо поместить в отдельные таблицы поля, не зависящие напрямую от первичного ключа. В
таблице «Итоги сессии» поля Должность преподавателя, Кафедра,
Заведующий кафедрой зависят от первичного ключа транзитивно, через поле Преподаватель.
В свою очередь поле Заведующий кафедрой зависит от поля Кафедра. Следовательно, необходимо создать еще две таблицы: «Преподаватель» и «Кафедра». Поле Преподаватель заменим на ФИО. Каждая кафедра закреплена за отдельным факультетом, поэтому добавим в таблицу
«Кафедра» поле Код факультета.
Преподаватель
Код преподавателя
ФИО
Должность преподавателя
Код кафедры
Кафедра
Код кафедры
Кафедра
Заведующий кафедрой
Код факультета
В таблице «Студенты» поле Декан тоже транзитивно зависит от первичного ключа № зачетки через поле Факультет. Создадим еще одну таблицу, в которой будут храниться сведения о факультете.
Факультет
Код факультета
Факультет
Декан
В результате этой работы у нас получится нормализованная структура базы данных (рис. 3).
Задание 1. Проектирование базы данных
Нормализовать структуру базы данных, включающую перечисленные поля:
1.«СОРЕВНОВАНИЯ»: фамилия спортсмена, страна проживания, город проживания, дата рождения, вид спорта, фамилия тренера, название соревнований, дата проведения соревнований, место проведения соревнований, занятое спортсменом место.
2.«ПОДПИСКА»: тип издания, название издания, индекс, фамилия подписчика, адрес подписчика, дата начала подписки, дата окончания срока подписки.
3.«ФУТБОЛЬНЫЙ ЧЕМПИОНАТ»: название команды, город, тренер, дата проведения игры, название команды-соперника, количество забитых мячей, количество пропущенных мячей, количество набранных за игру очков.
14
Рис. 3. Нормализованная база данных
4.«ВИДЕОПРОКАТ»: название фильма, страна, время, жанр, дата выпуска, ФИО клиента, адрес клиента, дата выдачи кассеты, дата возврата кассеты.
5.«АПТЕКА»: наименование лекарства, дата поступления, форма выпуска, количество в упаковке, количество упаковок в наличии, цена за упаковку, показания к применению, противопоказания, срок годности.
6.«СТРАНЫ МИРА»: страна, столица, часть света, материк, население, площадь, название реки, исток, устье, протяженность реки.
7.«СТРАХОВАЯ КОМПАНИЯ»: ФИО, адрес, место работы, дата рождения, серия страхового полиса, номер страхового полиса, паспортные данные, страховая сумма, дата происшествия, причина выплаты по страховке, начисленный процент по страховке.
8.«БИБЛИОТЕКА»: автор книги, название книги, год издания, тираж, количество экземпляров, ФИО читателя, адрес читателя, телефон читателя.
9.«ПОСТАВКИ ТОВАРОВ»: наименование товара, странапроизводитель, стоимость, страна-заказчик, название фирмызаказчика, адрес заказчика, телефон заказчика, дата оформления заказа, объем поставки.
10.«ТЕЛЕВИДЕНИЕ»: название программы, ведущий, время выхода в эфир, день выхода в эфир, длительность программы (часы), спонсор
15