Отношение находится во 2НФ тогда и только тогда, когда оно находится в 1НФ и каждое неключевое поле зависит от всего первичного ключа.

Говорят, что отношение находится в некоторой нормальной форме (НФ), если оно удовлетворяет заданному набору условий.

Проектирование реляционных баз данных

Реляционные объекты данных

Существует специальная терминология, принятая в теории реляционных БД (рис. 13).

 
 

 


Фамилия Имя Отчество Адрес Телефон
Иванов Иван Иванович Ленина,12-4 22-22-22
Петров Петр Петрович Свободы,2-9 33-33-33
Андреев Андрей Андреевич Грина,34-18 44-44-44
         

 

Отношением называется вся таблица, отвечающая определенным свойствам (о которых более подробно – ниже).

Отношение характеризуется следующими понятиями:

Поле (атрибут) соответствует столбцу этой таблицы, а именно – свойствам объектов, сведения о которых хранятся в ней.

Степень отношения – количество полей отношения.

Запись (кортеж) соответствует заполненной строке таблицы.

Кардинальное число – количество записей в отношении в текущий момент времени.

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

Например, если надо в таблицу поместить сведения о студентах, то первичным ключом может быть поле НомерЗачетнойКнижки или НомерСтуденческогоБилета, но не оба вместе.

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

 

Для всех отношений должны выполняться следующие свойства.

1. Нет одинаковых записей.

Следствие этого свойства: в отношении всегда существует первичный ключ.

2. Записи неупорядочены.

3. Поля не упорядочены.

4. Все значения полей неделимы.

 

Для обозначения таблицы (отношения) и его полей условимся использовать следующую запись:

ИмяТаблицы (ИмяПоля1, ИмяПоля2, …, ИмяПоляN),

где будем подчеркивать поля, входящие в первичный ключ, и где N – степень таблицы (отношения).

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

Процесс нормализации отношений основан на концепции нормальных форм.

Известно несколько НФ: первая нормальная форма (1НФ), вторая нормальная форма (2НФ), третья нормальная форма (3НФ), нормальная форма Бойса-Кодда (НФБК), четвертая нормальная форма (4НФ), пятая нормальная форма (5НФ). Причем все условия, необходимые для некоторой НФ, должны выполняться и для всех последующих НФ.

Возникает вопрос, можно ли продолжить нормализацию дальше, получить 6-ю, 7-ю и т. д. НФ? Действительно, существуют дополнительные НФ, но 5НФ считается во многих смыслах окончательной. А для практического проектирования достаточной считают 3НФ. Поэтому рассмотрим только три первые нормальные формы.

 

Отношение находится в 1НФ тогда и только тогда, когда значения всех полей неделимы.

Например, в отношении Студенты не должно быть поля Дисциплины, так как его значением будет перечисление всех изучаемых студентом дисциплин, т.е. значение делимо.

 

Например, рассмотрим отношение Успеваемость (НомерЗачетнойКнижки, Фамилия, Имя, Отчество, Дисциплина, Оценка).

Если первичным ключом здесь назначить НомерЗачетнойКнижки, то от него не будет зависеть поле Дисциплина. В этом случае отношение не находится во 2НФ.

Можно тогда в качестве первичного ключа взять множество полей {НомерЗачетнойКнижки, Дисциплина}. От такого ключа зависят все поля, но поля Фамилия, Имя, Отчество зависят только от поля НомерЗачетнойКнижки.

И при таком первичном ключе отношение не находится во 2НФ.

Чтобы получить отношения во 2НФ, произведем разбиение на два отношения:

Студенты (НомерЗачетнойКнижки, Фамилия, Имя, Отчество)

Успеваемость1 (НомерЗачетнойКнижки, Дисциплина, Оценка).