- •7.7.6. Определить общее количество поставщиков
- •7.7.7. Определить в поставках максимальное
- •7.7.8. Для каждой поставляемой детали указать номер и общий объем поставки в штуках
- •7.7.9. Указать номера всех типов деталей, поставляемых более чем одним поставщиком
- •7.7.10. Определить имена поставщиков детали с номером т2'
- •7.7.11. Определить имена поставщиков по крайней мере одной красной детали
- •7.7.12. Указать номера поставщиков, статус которых меньше текущего максимального статуса
- •7.7.13. Указать имена поставщиков детали с номером 'р2'
- •7.7.14. Выбрать имена поставщиков, которые не поставляют деталь с номером 'р2'
- •7.7.15. Определить имена поставщиков всех типов деталей
- •7.7.16. Определить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 's2', либо и то, и другое
- •7.8. Резюме
- •8.2. Ограничения типа
- •8.3. Ограничения атрибута
- •8.4. Ограничения переменной-отношения
- •8.5. Ограничения баз данных
- •8.6. "Золотое правило"
- •8.7. Ограничения состояния и ограничения перехода
- •8.8. Ключи
- •3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.
- •8.9. Средства языка sql
- •8.10. Резюме
- •9.1. Введение
- •9.2. Для чего нужны представления
- •9.3. Выборка данных из представлений
- •9.4. Обновление данных в представлениях
- •9.5. Моментальные снимки
- •9.6. Поддержка представлений в языке sql
- •9.7. Резюме
- •Часть III
- •10.1. Введение
- •10.2. Основные определения
- •10.3. Тривиальные и нетривиальные зависимости
- •10.4. Замыкание множества зависимостей
- •10.5. Замыкание множества атрибутов
- •10.6. Неприводимые множества зависимостей
- •10.7. Резюме
- •Глава 1 1
- •I Переменные-отношения в знф I
- •11.2. Декомпозиция без потерь
- •11.3. Первая, вторая и третья нормальные формы
- •11.4. Сохранение зависимостей
- •11.5. Нормальная форма Бойса-Кодда
- •11.6. Замечание по поводу атрибутов, содержащих в качестве значений отношения
- •11.7. Резюме
- •12.1. Введение
- •12.2. Многозначные зависимости и четвертая нормальная форма
- •12.3. Зависимости соединения и пятая нормальная форма
- •Соединение по комбинации атрибутов j#,s#
- •Исходное состояние spj
- •12.4. Общая схема процедуры нормализации
- •12.5. Денормализация
- •12.6. Ортогональное проектирование (небольшое отступление от темы)
- •12.7. Другие нормальные формы
- •12.8. Резюме
- •12.3. Brosda V., Vossen g. Update and Retrieval Through a Universal Schema Interface // acm tods. — December, 1988. — 13, № 4.
- •12.5. Date c.J. Will the Real Fourth Normal Form Please Stand Up? // c. J. Date and Hugh Darwen. Relational Database Writings 1989-1991.— Reading, Mass.: Addison-Wesley, 1992.
- •12.20.Kent w. The Universal Relation Revisited // acm tods. — December, 1983. — 8, № 4.
- •12.22.Maier d., Ullman j.D. Fragments of Relations // Proc. 1983 sigmod Intern. Conf. On Management of Data. — San Jose, Calif. — May, 1983.
- •12.24.Maier d., Ullman j.D. Maximal Objects and the Semantics of Universal Relation Databases // acm tods. — March, 1983. — 8, № 1.
- •Глава 13
- •13.1. Введение
- •13.2. Общий подход
- •Каждыи экземпляр сущности ности «Произведение"
- •13.3. Модель "сущность/связь"
- •13.5. Проектирование базы данных с помощью метода er-моделирования
- •13.6. Краткий анализ er-модели
- •13.7. Резюме
10.5. Замыкание множества атрибутов
В принципе, замыкание S+ для заданного множества функциональных зависимостей S можно вычислить с помощью следующего алгоритма: "Применять правила из предыдущего раздела до тех пор, пока создание новых функциональных зависимостей не прекратится". На практике редко требуется вычислить замыкание само по себе, а потому и только что упомянутый алгоритм вряд ли будет достаточно эффективным. Однако из этого раздела вы узнаете, как можно вычислить некоторое подмножество замыкания, а именно — то подмножество, которое состоит из всех функциональных зависимостей с некоторым (указанным) множеством Z атрибутов, расположенных слева. Точнее говоря, мы покажем, что для заданной переменной-отношения R, заданного множества атрибутов этой переменной-отношения Z и заданного множества функциональных зависимостей S, выполняющихся для переменной-отношения R, можно найти множество всех атрибутов переменной-отношения R, которые функционально зависимы от Z, т.е. так называемое замыкание Z+ множества Z в пределах S2. Простой алгоритм вычисления этого замыкания показан на рис. 10.2.
Упражнение. Докажите правильность этого алгоритма.
CLOSURE[Z,S] := Z ; |
|
do <бесконечно>; |
|
for each FD X —> Y in S |
/* для каждой ФЗ X —» Y в S */ |
do ; |
|
if X < CLOSURE!Z,S] |
/* < = <является подмножеством> */ |
then CLOSURE[Z,S] := |
CLOSURE[Z,S] U Y ; |
end ; |
|
if CLOSURE[Z,S] <не изменилось в этой итерации> | |
then leave loop ; |
/* вычисления завершаются */ |
end ; |
|
Рис. 10.2. Вычисление замыкания Z множества Ze пределах S
2
Множество функциональных зависимостей
с атрибутами Z,
расположенными
слева, представляет собой множество
из всех функциональных зависимостей
вида Z—>Z',
где Z'
является некоторым подмножеством Z
.
Тогда замыкание S
исходного
множества S
представляет
собой объединение всех таких множеств
функциональных зависимостей, взятых
для всех возможных множеств атрибутов
Z
В —» Е CD -» EF
Вычислим замыкание {А,В}+ множества атрибутов {А,В}, исходя из заданного множества функциональных зависимостей.
Присвоим замыканию CLOSURE[Z,S] начальное значение — множество {А,В}.
Выполним внутренний цикл четыре раза — по одному разу для каждой заданной функциональной зависимости. На первой итерации (для зависимости А —> ВС) будет обнаружено, что левая часть действительно является подмножеством замыкания CLOSURE[Z,S]. Таким образом, к результату можно добавить атрибуты В и С. Замыкание CLOSURE[Z,S] теперь представляет собой множество (А,В,С}.
На второй итерации (для зависимости Е —> CF) обнаруживается, что левая часть не является подмножеством полученного до этого момента результата, который, таким образом, остается неизменным.
На третьей итерации (для зависимости В —» Е) к замыканию CLOSURE [Z,S] будет добавлено множество Е, которое теперь будет иметь вид {А,В,С,Е}.
На четвертой итерации (для зависимости CD —> EF) замыкание CLOSURE [Z,S] останется неизменным.
Далее внутренний цикл выполняется еще четыре раза. На первой итерации результат останется прежним, на второй он будет расширен до {A,B,C,E,F}, а на третьей и четвертой — снова не изменится.
Наконец после еще одного четырехкратного прохождения цикла замыкание CLOSURE [Z,S] останется неизменным и весь процесс завершится с результатом {А,В}+ = {A,B,C,E,F}. |
Из сказанного выше можно сделать очень важное заключение: для заданного множества функциональных зависимостей S легко можно указать, будет ли заданная функциональная зависимость X —> Y следовать из S, поскольку это возможно тогда и только тогда, когда множество Y является подмножеством замыкания Х+ множества X для заданного множества S. Иначе говоря, таким образом представлен простой способ определения, будет ли данная функциональная зависимость X —> Y включена в замыкание S+ множества S.
Еще одно важное заключение основано на следующем факте. Прежде всего, вспомним определение понятия суперключ из главы 8. Суперключ переменной-отношения R— это множество атрибутов переменной-отношения R, которое в виде подмножества (но необязательно собственного подмножества) содержит по крайней мере один потенциальный ключ. Из этого определения прямо следует, что суперключи для данной переменной-отношения R— это такие подмножества К множества атрибутов переменной-отношения R, что функциональная зависимость К —> А будет истинна для каждого атрибута А переменной-отношения R. Другими словами, множество К является суперключом тогда и только тогда, когда замыкание К+ для множества К в пределах заданного множества функциональных зависимостей является множеством абсолютно всех атрибутов переменной-отношения R. (Кроме того, множество К является потенциальным ключом тогда и только тогда, когда оно является неприводимым суперключом).