Нормализация баз данных: 4-я нормальная форма
Эта статья предназначена для чтения после статьи о нормальной форме Бойса-Кодда.
Давайте рассмотрим ситуацию, когда избыточность может проникнуть даже в таблицу, находящуюся в нормальной форме Бойса-Кодда. Возьмем пример со студентами, преподавателями и курсами, используемый в той статье, но изменим одно из первоначальных предположений.
Предположим, что для следующих таблиц справедливо следующее:
- Каждый преподаватель ведет только один курс.
- Каждый курс может иметь одного или нескольких преподавателей.
- Каждый студент может иметь нескольких преподавателей по одному курсу (это отличается от предыдущего примера).
- Каждый студент может посещать один или несколько курсов.
Данные студента-курса-преподавателя с несколькими преподавателями на курс
Дополнительные аномалии данных
| Студент | Курс | Преподаватель |
|---|---|---|
| Conrad Pienaar | Биология | Nkosizana Asmal |
| Dingaan Fortune | Математика | Kader Dlamini |
| Gerrie Jantjies | Наука | Helen Ginwala |
| Mark Thobela | Биология | Nkosizana Asmal |
| Conrad Pienaar | Наука | Peter Leon |
| Alicia Ncita | Наука | Peter Leon |
| Quinton Andrews | Математика | Kader Dlamini |
| Dingaan Fortune | Математика | Helen Ginwala |
Данные такие же, как и раньше, за исключением того, что Helen Ginwala преподает науку Gerrie Jantjies, а также математику Dingaan Fortune, и Dingaan Fortune обучается у Helen Ginwala и Kader Dlamini по математике.
Единственным возможным ключом является комбинация всех трех атрибутов, как показано ниже. Никакая другая комбинация не позволит однозначно идентифицировать определенную запись.
Три атрибута как ключ
| Таблица студент-курс-преподаватель |
|---|
| Студент |
| Преподаватель |
| Курс |
Но это все еще имеет некоторые потенциально аномальные особенности. Факт, что Kader Dlamini преподает математику, все еще хранится более одного раза, как и тот факт, что Dingaan Thobela изучает математику. Реальная проблема заключается в том, что таблица хранит более одного вида фактов: связь студент-курс, а также связь студент-преподаватель. Как всегда, этого можно избежать, разделив данные на две таблицы, как показано ниже:
Создание таблицы для связи студент-преподаватель
| Таблица Студент-Преподаватель |
|---|
| Студент |
| Преподаватель |
Создание таблицы для связи студент-курс
| Таблица Студент-Курс |
|---|
| Студент |
| Курс |
Такая ситуация возникает, когда у вас есть несколько многозначных зависимостей. Многозначная зависимость существует между двумя атрибутами, когда для каждого значения первого атрибута существует одно или несколько связанных значений второго атрибута. Для каждого значения студента было много значений курса. Это первая многозначная зависимость. Затем, для каждого значения студента, существует одно или несколько связанных значений преподавателя. Это вторая многозначная зависимость.
Таким образом, таблица находится в 4-й нормальной форме, если:
- она находится в нормальной форме Бойса-Кодда
- она не содержит более одной многозначной зависимости
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/database-normalization-4th-normal-form/