Функциональная и многозначная зависимости
Процесс нормализации — это разбиение таблицы на две или более с целью ликвидации дублирования данных и потенциальной их противоречивости. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором «каждый факт появляется лишь в одном месте».
Каждая таблица в реляционной модели удовлетворяет условию, в соответствии с которым на пересечении любой строки и столбца таблицы всегда находится единственное атомарное значение, и никогда не может быть множества таких значений. Говорят, что таблица, удовлетворяющая такому условию, находится в первой нормальной форме, сокращенно 1НФ.
Теперь в дополнение к 1НФ можно определить дальнейшие уровни нормализации — вторую нормальную форму (2НФ), третью: нормальную форму (ЗНФ) и т. д. По существу, таблица находится во 2НФ, если она находится в 1НФ и удовлетворяет, кроме того, некоторому дополнительному условию, суть которого будет рассмотрена ниже. Таблица находится в ЗНФ, если она находится в 2НФ и, помимо этого, удовлетворяет еще другому дополнительному условию и т. д.
Теория нормализации основывается на наличии той или иной зависимости между столбцами таблицы. Рассмотрим два вида таких зависимостей: функциональные и многозначные.
Функциональная зависимость, по сути, является связью типа «многие к одному» между множествами атрибутов (столбцов) рассматриваемого отношения.
Например, в таблице «Учебный план» (см. рис. 6.3) столбцы Дисциплина, Семестр и Форма отчетности функционально зависят от ключа № (порядковый номер) в учебном плане, а в таблице «Результаты сессии» столбец Оценка функционально зависит от составного ключа (Студент, Учебный план). Многозначная зависимость. Говорят, что один атрибут таблицы многозначно определяет другой атрибут той же таблицы, если для каждого значения первого атрибута существует хорошо определенное множество соответствующих значений второго атрибута. В качестве примера рассмотрим фрагмент таблицы «Прием экзаменов (зачетов)», изображенный на рис. 6.4. Таблица отражает связь дисциплины и формы отчетности с фамилией преподавателя. В этой таблице существует многозначная зависимость«Дисциплина — Преподаватель»: дисциплину «Математический анализ» ведут несколько преподавателей (Раков И. И., Рыбин К. К., Карпов К. Ю.) и, соответственно, все они могут участвовать в приеме экзаменов (зачетов). Другая многозначная зависимость — «Дисциплина — Форма отчетному» по одной и той же дисциплине могут проводиться и экзамен, и зачет. При этом Форма отчетности и Преподаватель не связаны функциональной зависимостью, что приводит к появлению избыточности (чтобы добавить фамилию еще одного преподавателя, придется ввести в таблицу две новые строки).