Нормализация отношений

Лекция 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НФ.