Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции к урокам 2007.doc
Скачиваний:
90
Добавлен:
23.12.2018
Размер:
3.44 Mб
Скачать
  1. Деление.

Пусть даны два отношения 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 [личный номер, код дисциплины]

Личный номер

Код дисциплины

11

1

11

2

11

3

22

1

22

2

33

3

В качестве делителя берется проекция Y=R2[код дисциплины]; содержащая список номеров всех делителей.

Таблица 22. Отношение Y=R2[код дисциплины]

Код дисциплины

1

2

3

Деление X divideby Y дает список номеров студентов, которые сдали все экзамены

Таблица 23. Отношение X divideby Y

Личный номер

1

Итак, как отказалось, что только один студент с личным номером 1 сдал все экзамены.

Примеры использования реляционных операторов.

Пример.1. Получить фамилии студентов, сдавших дисциплину с кодом 3.

Решение.

((R3 join R1) where Код_дисциплины = 3) [Фамилия_студента]

Пример 2. Получить фамилии студентов, сдавших философию.

Решение.

(((R2 where название_дисциплины = философия) join R3) join R1)[Фамилия_студента]

Пример 3. Получить фамилии студентов, сдавших все дисциплины.

Решение:

((R3 [личный_номер, код_дисциплины] divideby R2 [код_дисицплины] join R1) [Фамилия_студента]

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

Отношения реляционной БД содержат как структурную, так и семантическую (смысловую) информацию. Структурная информация задается схемой отношения, а семантическая выражается функциональными связями между атрибутами, известными и учитываемыми в схеме. Состав атрибутов отношений БД должен удовлетворять двум основным требованиям:

  • между атрибутами не должно быть нежелательных функциональных зависимостей;

  • группировка атрибутов должна обеспечить минимальное дублирование данных, их обработку и обновление без трудностей.

Удовлетворение этих трудностей достигается нормализацией отношений БД.

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

Аппарат нормализации был разработан Коддом. В нем определяются различные нормальные формы. Каждая нормальная форма ограничивает типы допустимых функциональных зависимостей.

Кодд выделил три нормальные формы – 1НФ, 2НФ, 3НФ. Самая совершенная из них:3НФ. Но на сегодняшний день их уже существует пять: 1НФ, 2НФ, 3НФ, 4НФ, 5НФ.