Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач по Гордиенко.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать

3.2.2. Нормальные формы

Одни и те же данные могут группироваться в таблицы различными способами. Группировка атрибутов в отношениях должна быть рациональной, т.е. минимизирующей дублирование данных и упрощающей процедуры их обработки и обновления. Устранение избыточности данных, аномалий модификации, являющиеся важнейшими задачами при проектировании баз данных, обеспечиваются нормализацией.

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

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

Общее понятие нормализации подразделяется на несколько нормальных форм.

Рассмотрим пример ненормализованной (табл. 1) и нормализованной таблиц.

Таблица 1

Пример ненормализованной таблицы

КодПоставщика

КодПродукта

Продукт

123

1

5

12

Сахар

Соль

Мука

412

36

5

15

Кукуруза

Соль

Пшено

357

54

16

Кефир

Молоко

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

Первая нормальная форма

Любая таблица, удовлетворяющая определению отношения, находится в первой нормальной форме (1НФ). Основные характеристики таблицы в 1НФ:

  • В каждой строке таблицы должны содержаться данные, соответствующие некоторому объекту или его части;

  • В каждом столбце должны находиться данные, соответствующие одному из атрибутов отношения;

  • В каждой ячейке таблицы должно находиться только единственное значение;

  • У каждого столбца должно быть уникальное имя;

  • Все строки (записи) в таблице должны быть различными;

  • Порядок расположения столбцов и строк в таблице не имеет значение.

Таблица в 1НФ приведена в табл. 2.

Таблица 2

Пример таблицы в 1НФ

КодПоставщика

КодПродукта

Продукт

123

1

Сахар

123

5

Соль

123

12

Мука

412

36

Кукуруза

412

5

Соль

412

15

Пшено

357

54

Кефир

Вторая нормальная форма

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

Рассмотрим пример отношения Секции (Фамилия, Секция, Плата), показанный в табл. 3.

Таблица 3

Отношение Секции (Фамилия, Секция, Плата)

Фамилия

Секция

Плата

Дмитриев

Футбол

300

Ткачева

Волейбол

250

Колесников

Шахматы

200

Ларина

Теннис

350

Кислов

Футбол

300

Ключом в данном отношении является {Фамилия, Секция}, но он содержит функциональную зависимость Секция  Плата. Левая часть этой зависимости является лишь частью составного ключа. Отношение Секции имеет аномалии удаления и добавления. Так, если мы захотим удалить запись с фамилией «Колесников», то потеряем стоимость шахматной секции. Мы не можем добавить запись о новой секции, пока в нее кто-то не запишется.Данных аномалий можно было бы избежать, если бы атрибут Плата зависел от всего ключа (однозначно определялся всем ключом).

Отношение Секции (Фамилия, Секция, Плата) в 1НФ можно разбить на два отношения во 2НФ:

  • Секция_Спортсмен (Фамилия, Секция);

  • Секция_Плата (Секция, Плата).

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

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

Рассмотрим в качестве примера отношение Проживание_Студентов (НомерСтудента, Общежитие, Плата), представляющее сведения о студентах, проживающих в общежитиях (табл. 4).

Таблица 4

Пример отношения с транзитивной зависимостью

НомерСтудента

Общежитие

Плата

129

№ 2

700

536

№6

1000

435

№1

650

269

№2

700

419

№1

650

Ключом в этом отношении является НомерСтудента. Плата однозначно определяется атрибутом Общежитие, т.е. имеется функциональная зависимость Общежитие  Плата. Поскольку один студент проживает только в одном общежитии, и каждое общежитие взимает со всех проживающих в нем студентов одинаковую плату, в отношении есть и функциональная зависимость НомерСтудента Общежитие. Таким образом, возникает транзитивная зависимость НомерСтудента Плата.

Ключом отношения Проживание_Студентов является НомерСтудента, который представляет собой одиночный атрибут, и, следовательно, отношение находится во 2НФ. Несмотря на это, в рассматриваемом отношении существует аномалия удаления. Удалив вторую запись, мы потеряем не только тот факт, что студент №536 проживает в общежитии №6, но и тот факт, сколько стоит проживание в этом общежитии.

Чтобы устранить указанную аномалию, следует декомпозировать исходное отношение Проживание_Студентов (НомерСтудента, Общежитие, Плата) на два (рис. 16):

  • Проживание (НомерСтудента, Общежитие);

  • Стоимость (Общежитие, Плата).

НомерСтудента

Общежитие

Общежитие

Плата

129

№ 2

№ 2

700

536

№6

№6

1000

435

№1

№1

650

269

№2

№2

700

419

№1

№1

650

Рис. 16. Отношения, не имеющие транзитивных зависимостей

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