Нормализация отношений
Лекция 12
Примеры использования реляционных операторов.
Деление.
Пусть даны два отношения R1(R11, R12,…,R1n, R21, R22,…,R2m) и R2 (R21, R22,…,R2m), причем атрибуты R21, R22,…,R2m – общие для двух отношений. Делением отношенийR1и R2 называется отношение с заголовком R11, R12,…,R1n и телом, содержащим множество кортежей (r11, r12,…,r1n), таких, что для всех кортежей (r21, r22,…,r2m)ÎR2 в отношении R1 найдется кортеж (r11, r12,…,r1n, r21, r22,…,r2m).
Отношение R1 является делимым, отношение R2 – делителем. Деление отношений аналогично делению чисел с остатком. Синтаксис операции деления:
R1 divideby R2
Пример 11.рассмотрим запрос, связанный с выяснением информации, касающейся «Кто из студентов сдал все экзамены?»
В качестве делимого выбирается проекция x = R3 [личный номер, код дисциплины], которая содержит личный номер студента и код сданной им дисциплины.
Таблица 21. Проекция x = R3 [личный номер, код дисциплины]
Личный номер | Код дисциплины |
В качестве делителя берется проекция Y=R2[код дисциплины]; содержащая список номеров всех делителей.
Таблица 22. Отношение Y=R2[код дисциплины]
Код дисциплины |
Деление X divideby Y дает список номеров студентов, которые сдали все экзамены
Таблица 23. Отношение X divideby Y
Личный номер |
Итак, как отказалось, что только один студент с личным номером 1 сдал все экзамены.
Пример.1. Получить фамилии студентов, сдавших дисциплину с кодом 3.
Решение.
((R3 join R1) where Код_дисциплины = 3) [Фамилия_студента]
Пример 2. Получить фамилии студентов, сдавших философию.
Решение.
(((R2 where название_дисциплины = философия) join R3) join R1)[Фамилия_студента]
Пример 3. Получить фамилии студентов, сдавших все дисциплины.
Решение:
((R3 [личный_номер, код_дисциплины] divideby R2 [код_дисицплины] join R1) [Фамилия_студента]
Отношения реляционной БД содержат как структурную, так и семантическую (смысловую) информацию. Структурная информация задается схемой отношения, а семантическая выражается функциональными связями между атрибутами, известными и учитываемыми в схеме. Состав атрибутов отношений БД должен удовлетворять двум основным требованиям:
ü между атрибутами не должно быть нежелательных функциональных зависимостей;
ü группировка атрибутов должна обеспечить минимальное дублирование данных, их обработку и обновление без трудностей.
Удовлетворение этих трудностей достигается нормализацией отношений БД.
Нормализация отношений – это пошаговый обратимый процесс декомпозиции (разложения) исходных отношений БД на другие более мелкие и простые. При этом устанавливаются все возможные функциональные зависимости.
Аппарат нормализации был разработан Коддом. В нем определяются различные нормальные формы. Каждая нормальная форма ограничивает типы допустимых функциональных зависимостей.
Кодд выделил три нормальные формы – 1НФ, 2НФ, 3НФ. Самая совершенная из них:3НФ. Но на сегодняшний день их уже существует пять: 1НФ, 2НФ, 3НФ, 4НФ, 5НФ.