- •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.7. Резюме
Функциональная зависимость — это связь типа "многие к одному" между двумя множествами атрибутов заданной переменной-отношения. Для заданной переменной-отношения R зависимость А —> В (где А и В являются подмножествами множества атрибутов переменной-отношения R) выполняется для переменной-отношения R тогда и только тогда, когда любые два кортежа переменной-отношения R с одинаковыми значениями атрибутов множества А имеют одинаковые значения атрибутов множества В.
Каждая переменная-отношение обязательно удовлетворяет некоторым тривиальным функциональным зависимостям; причем функциональная зависимость тривиальна тогда и только тогда, когда ее правая (зависимая) часть является подмножеством ее левой части (детерминанта).
Одни функциональные зависимости подразумевают другие зависимости. Для данного множества зависимостей S замыканием S+ называется множество всех функциональных зависимостей, подразумеваемых зависимостями множества S. Множество S обязательно является подмножеством собственного замыкания S+. Правила логического вывода Армстронга обеспечивают исчерпывающую и полную основу для вычисления замыкания S+ для заданного множества S, хотя несколько дополнительных правил вывода (легко выводимых из правил Армстронга) позволяют упростить практические вычисления.
Для данного подмножества Z множества атрибутов переменной-отношения R и множества функциональных зависимостей S, которые выполняются в переменной-отношении R, замыканием Z+ подмножества Z для множества S называется такое множество всех атрибутов А переменной-отношения R, что функциональная зависимость Z —> А является членом замыкания S+. Если замыкание Z+ состоит из всех атрибутов переменной-отношения R, то подмножество Z называют суперключом переменной-отношения R (а неприводимый суперключ, в свою очередь, называется потенциальным ключом). В этой главе было дано описание простого алгоритма для получения замыкания Z+ на основе Z и S и, следовательно, для определения, является ли данная зависимость X -» Y членом замыкания S+ (функциональная зависимость X -> Y является членом замыкания S+ тогда и только тогда, когда множество Y является подмножеством замыкания Х+).
Два множества функциональных зависимостей S1 и S2 эквивалентны тогда и только тогда, когда они являются покрытиями друг для друга, т.е. S1+=S2+. Каждое множество функциональных зависимостей эквивалентно по крайней мере одному неприводимому множеству. Множество функциональных зависимостей является неприводимым, если, во-первых, каждая функциональная зависимость этого множества имеет одноэлементную правую часть; во-вторых, если ни одна функциональная зависимость множества не может быть устранена без изменения замыкания этого множества; в-третьих, если ни один атрибут не может быть устранен из левой части любой функциональной зависимости данного множества без изменения замыкания множества. Если I является неприводимым множеством, которое эквивалентно множеству S, то проверка выполнения функциональных зависимостей из множества I автоматически обеспечит выполнение всех функциональных зависимостей из множества S.
В заключение следует отметить, что многие высказанные выше соображения можно расширить в отношении ограничений целостности вообще, а не только функциональных зависимостей. Например, в общем случае следующие допущения являются верными.
Некоторые ограничения целостности являются тривиальными.
Одни ограничения целостности подразумевают другие ограничения.
Множество всех ограничений, подразумеваемых заданным множеством, может рассматриваться как замыкание этого заданного множества.
Выяснение вопроса, будет ли некоторое ограничение, находиться в некотором замыкании (т.е. будет ли заданное ограничение подразумеваться некоторыми данными ограничениями), является очень интересной практической задачей.
Не менее интересной практической задачей является поиск неприводимого покрытия для некоторого заданного множества установленных ограничений.
Благодаря наличию исчерпывающего и полного множества правил вывода различных функциональных зависимостей, работать с ними удобнее, чем с ограничениями целостности вообще. В списках рекомендуемой литературы в конце этой и главы 12 даны ссылки на работы, в которых описывается несколько других типов ограничений (MVD, JD и IND); для них также существуют подобные наборы правил вывода. Однако в данной книге другие существующие типы ограничений столь же подробно и полно, как функциональные зависимости, не рассматриваются.
Упражнения
Пусть R является переменной-отношением степени п. Каково максимальное количество функциональных зависимостей (как тривиальных, так и нетривиальных), которые могут выполняться для переменной-отношения R?
Что конкретно имеется в виду, когда говорится, что правила Армстронга полны и исчерпывающи?
Докажите правила рефлексивности, дополнения и транзитивности, используя только определение функциональной зависимости.
Докажите, что три предыдущих правила подразумевают правила самоопределения, декомпозиции, объединения и композиции.
Докажите общую теорему объединения, предложенную Дарвеном. Какие из перечисленных выше правил потребуются для этого? Какие правила можно вывести в виде особых случаев этой теоремы?
Дайте определение для а) замыкания множества функциональных зависимостей; б) замыкания множества атрибутов для заданного множества функциональных зависимостей.
Перечислите множество всех функциональных зависимостей, которые всегда выполняются для переменной-отношения поставок SP.
Ниже приведено множество функциональных зависимостей, имеющих место для переменной-отношения R{A,B,C,D,E,F,G}.
А —> В ВС -> DE AEF —> G
Вычислите замыкание {А,С}+ для данного множества функциональных зависимостей. Подразумевается ли зависимость ACF —» DG одной из функциональных зависимостей этого множества?
10.9. Что означает понятие эквивалентности двух множеств функциональных зависимо- стей S1 и S2?
10.10.Что означает понятие неприводимости множества функциональных зависимостей? 10.11.Определите, эквивалентны ли два приведенных ниже множества функциональных зависимостей, установленных для переменной-отношения R{A,B,C,D,E}.
А -» В АВ -> С D -> AC D -> Е
А —» ВС D -» АЕ
10.12.Найдите неприводимое покрытие приведенного ниже множества функциональных зависимостей, заданных для переменной-отношения R{A,B,C,D,E,F}.
АВ —> С С —> А ВС —> D ACD -> В BE —> С СЕ -» FA CF -> BD D —> EF
10.13.В переменной-отношении TIMETABLE определены перечисленные ниже атрибуты. D День недели (1-5) Р Период времени в течение дня (1-8) С Номер класса Т Имя учителя L Название урока
Кортеж {D:d, Р:р, С:с, T:t, L:l} является элементом этой переменной-отношения тогда и только тогда, когда урок 1 проводится учителем t в классе с в момент {D:d, Р:р). Предположим, что длительность всех уроков равна одному периоду времени и, кроме того, каждый урок имеет название, уникальное по отношению ко всем урокам этой недели. Какие функциональные зависимости выполняются для этой переменной-отношения? Какие потенциальные ключи существуют для этой переменной-отношения?
10.14. Пусть задана переменная-отношение NADDR с атрибутами NAME (уникальное имя), STREET (улица), CITY (город), STATE (штат) и ZIP (индекс), где каждому индексу соответствует только один город и штат, а каждой улице, городу и штату соответствует только один индекс. Найдите неприводимое множество функциональных зависимостей для этой переменной-отношения. Какие потенциальные ключи существуют для этой переменной-отношения?
10.15.Пусть дана переменная-отношение R с атрибутами {A,B,C,D,E,F,G,H,I,J}, для которой выполняется приведенное ниже множество функциональных зависимостей.
ABD -» Е АВ —> G В —> F
С —> J CJ -> I G -> H
Является ли это множество неприводимым? Какие потенциальные ключи существуют для данной переменной-отношения?
Список литературы
10.1. Armstrong W. W. Dependency Structures of Data Base Relationships // Proc. IFIP Congress. — Stockholm, Sweden, 1974.
Здесь впервые изложена формальная теория функциональных зависимостей (т.е. эта работа является первоисточником аксиом Армстронга), а также приведена точная характеристика потенциальных ключей.
10.2. Casanova М.А., Fagin R., Papadimitriou C.H. Inclusion Dependencies and Their Interaction with Functional Dependencies // Proc. 1st ACM SIGACT-SIGMOD Symposium on Principles of Database Systems. — Los Angeles, Calif., March, 1982.
Зависимости включения (inclusion dependencies — INDs) являются обобщением концепции ограничений целостности. Например, зависимость включения типа
SP.SI ) S.SI
(здесь символическая запись содержит несколько более длинную стрелку, подчеркивающую, что это зависимость другого типа) означает, что множество значений атрибута SP.SI должно быть подмножеством (необязательно собственным подмножеством) множества значений атрибута S.S#. Это, конечно, частный случай ограничения целостности, в общем же случае для зависимости включения не существует никаких ограничений на то, что левая часть является внешним ключом, а правая — потенциальным.
Замечание. Зависимости включения имеют некоторое сходство с функциональными зависимостями, поскольку оба эти типа зависимостей представляют связь "многие к одному". Однако зависимости включения обычно покрывают переменные-отношения, тогда как функциональные зависимости не покрывают.
Предложено исчерпывающее и полное множество правил вывода для зависимостей включения, которые могут быть (в несколько нестрогой форме) представлены в следующем виде.
А > А.
Если АВ > CD, то А > С и В > D.
Если А > В и В > С, то А > С.
10.3. Casey R.G., Delobel С. Decomposition of a Data Base and the Theory of Boolean Switching Functions // IBM J. R&D. — September, 1973. —- 17, № 5.
В работе показано, что для данной переменной-отношения множество функциональных зависимостей (которые в этой статье называются функциональными связями) может быть представлено как "булева переключательная функция". Кроме того, отмечено, что эта функция в некотором смысле уникальна, посколь
ку исходные функциональные зависимости могут быть заданы многими совершенно различными (но эквивалентными) способами, каждый из которых в общем приводит к возникновению существенно разных булевых функций, но все такие функции могут быть сведены к одной той же канонической форме с помощью законов булевой алгебры. Показано, что проблема декомпозиции исходной переменной-отношения (т.е. декомпозиция без потерь; подробности приводятся в главе 11) логически эквивалентна хорошо известной в булевой алгебре проблеме поиска "покрывающего множества из простых импликантов" для булевой функции, соответствующей этой переменной-отношению вместе с ее функциональными зависимостями. Следовательно, исходная проблема может быть переформулирована в эквивалентную проблему в булевой алгебре, а для ее решения могут применяться хорошо известные методы.
Эта одна из первых работ, посвященных применению теории зависимостей для широкого круга других дисциплин. Этому также посвящена публикация [10.8] и несколько работ, упомянутых в списках литературы в главе 12.
10.4. Codd E.F. Further Normalization of the Data Base Relational Model // Data Base Systems, Courant Computer Science Symposia Series 6. — Englewood Cliffs, N J.: Prentice-Hall, 1972.
Впервые представлена концепция функциональной зависимости (не считая более раннего упоминания в одном из внутренних документов фирмы IBM). Понятие "дальнейшая нормализация" (Further Normalization), приведенное в заголовке, относится к некоторому типу специализированного макета базы данных, обсуждаемого в главе 11 (назначение этой статьи заключалось в демонстрации возможности использования идеи функциональной зависимости для решения проблем проектирования базы данных). Действительно, функциональные зависимости представляют собой одну из первых попыток разрешения этой проблемы. Однако идея ФЗ с тех пор доказала свою полезность и для более широкого практического применения.
10.5. Codd E.F. Normalized Data Base Structure: A Brief Tutorial // Proc. 1971 ACM SIGFIDET Workshop on Data Description, Access, and Control. — San Diego, Calif., November, 1971.
Вводное изложение идей, представленных в [10.4].
10.6. Darwen Н. The Role of Functional Dependence in Query Decomposition // C.J. Date and H. Darwen. Relational Database Writings 1989-1991.— Reading, Mass.: Addison-Wesley, 1992.
Представлен набор правил наследования для функциональных зависимостей, с помощью которых может быть выведена выполнимость функциональных зависимостей для данной произвольной переменной-отношения на основе выполнимости этих зависимостей в переменной-отношении (или нескольких переменных-отношениях), из которой выведена данная переменная-отношение. Выведенное таким образом множество ФЗ может использоваться для определения потенциальных ключей для некоторой выведенной переменной-отношения. В результате можно получить правила наследования для потенциальных ключей, кратко упомянутые в главах 8 и 9 как "наиболее желательные". В статье показано, как эти правила наследования для функциональных зависимостей и потенциальных ключей
могут использоваться для значительного повышения производительности СУБД, ее функциональности и удобства пользования,
Darwen Н. OObservations of a Relational Bigot // Presentation to BCS Special Interest Group on Format Aspects of Computing Science. — London, UK, December, 1990.
Fagin R. Functional Dependencies in a Relational Database and Propositional Logic // IBM J.R&D. — November, 1977. — 21, № 6.
Показано, что аксиомы Армстронга [ЮЛ] строго эквивалентны системе импликационных утверждений в логике высказываний. Иначе говоря, задается отображение между функциональными зависимостями и утверждениями в логике высказываний, а затем показывается, что данная зависимость f является последовательностью заданного множества зависимостей S тогда и только тогда, когда высказывание, соответствующее f, является логическим следствием множества высказываний, соответствующих множеству S.
10.9. Lucchesi C.L., Osborn S.L. Candidate Keys for Relations // J. Сотр. and Sys. Sciences. — 1978. — 17, № 2.
Представлен алгоритм поиска всех потенциальных ключей, а также функциональных зависимостей, выполняющихся для заданной переменной-отношения.
Ответы к некоторым упражнениям
10.1. Функциональная зависимость— это утверждение типа А —> В, где А и В являются подмножествами множества атрибутов переменной-отношения R. Поскольку множество из п элементов образует 2" возможных подмножеств, каждое из множеств А и В может содержать по 2" возможных значений. Следовательно, общее число возможных функциональных зависимостей равно 22п.
10.5.
А —> В (дано)
С —> D (дано)
А -> В п С (зависимость соединения, 1)
С - В —> С - В (самоопределение)
А и ( С • В ) -) ( В п С ) и ( С • В ) (композиция, 3,4)
А и ( С - В ) -) С (упрощение, 5)
Аи ( С-В ) —> d (транзитивность, 6, 2)
Аи ( С • В ) -> Ви D (композиция, 1, 7)
Доказательство завершено. |
Использованные для доказательства правила указаны в скобках. Среди них есть правила, которые являются особыми случаями теоремы Дарвена: объединение, транзитивность, композиция и дополнение. Таким же особым случаем теоремы Дарвена является следующее полезное правило.
■ Если А —> В и АВ —> С, то А —» С.
10.7. Ниже приведен полный набор функциональных зависимостей (т.е. замыкание) для переменной-отношения SP.
Si, Pt, QTY
Si, Pt, QTY
Si', Pi, QTY
Si, Pi, QTY
Si, Pi, QTY
St, Pt, QTY
Si, Pi, QTY
Si, Pi, QTY
Si, Pt } ->
St, Pt } ->
St, Pt } -»
St, Pt } ->
St, Pt } -*
St, Pi } ->
St, Pi } -»
si, Pi } -»
-> { Si, Pt, QTY } -» { Si, Pi } -» { Pi, QTY } -» { Si, QTY } -» { Si } -»{*#} -» { QTY }
-> { >
Si, Pt, QTY } Si, Pt } Pt, QTY } St, QTY } St }
Pt }
QTY } }
Pt, QTY } —> { Pt, QTY }
Pt, QTY } -» { Pi }
Pt, QTY } -» { QTY }
Pt, QTY } -» { }
Si, QTY } -> { Si, QTY }
St, QTY } -» { Si }
St, QTY } -> { QTY }
Si, QTY } -» { }
S# } -> { S# } si } -» { }
Pi } -> { Pi } Pt } -* { }
QTYi } { QTYi } QTYi } -» { }
10.8.
} -» { }
{A,C}+ = {A,B,C,D,E}. На вторую часть вопроса следует дать утвердительный ответ.
10.11.Они эквивалентны. Пронумеруем функциональные зависимости из первого множества следующим образом.
А —» В
АВ —> С
D —> AC
D -4 E
Тогда строка 3 может быть заменена следующей строкой. 3. О -> А и D -> С
Затем с помощью строки 1 можно придать строке 2 такой вид.
2. А -> С
Но поскольку теперь D —» А и А —» С, по транзитивности это подразумевает D —» С, а в результате для строки 3 можно получить следующее выражение.
3. D А
Таким образом, первое множество функциональных зависимостей эквивалентно следующему неприводимому множеству.
А -* В
А -» С D -» А
D —* Е
Приведенное ниже второе множество функциональных зависимостей, очевидно, эквивалентно данному неприводимому множеству.
А -» ВС D —» АЕ
Таким образом, эти множества эквивалентны. | 10.12.Прежде всего, следует переписать данное множество так, чтобы каждая функциональная зависимость имела одноэлементную правую часть.
АВ —> С
С -» А
ВС -» D
ACD -» В
BE -> С
СЕ -» А
СЕ —^ F
CF —> В
CF -» D
D —> Е
D -» F
Тогда получаем следующее.
■ Строка 2 подразумевает строку 6, поэтому строку 6 можно опустить.
" Строка 8 подразумевает функциональную зависимость CF —> ВС (по правилу дополнения), которая вместе со строкой 3 подразумевает функциональную зависимость CF —> D (по правилу транзитивности), так что строку 9 можно опустить.
■ Строка 8 подразумевает функциональную зависимость ACF —> АВ (по дополнению), а строка 11 — функциональную зависимость ACD —> ACF (по дополнению). Тогда можно записать, что ACD —> АВ (по правилу транзитивности) и ACD —» В (по правилу декомпозиции). Таким образом, строку 4 можно опустить.
На этом все операции вывода завершаются и множество становится неприводимым.
АВ —> С
С —> А
ВС —> D
BE —> С
се —> f
CF —> В
D -» Е
D —> F
Вывод можно осуществить иначе.
Строка 2 подразумевает функциональную зависимость CD —» ACD (по правилу композиции), которая со строкой 4 подразумевает функциональную зависимость CD —> В (по правилу транзитивности), так что строку 4 можно заменить зависимостью CD —*■ В.
Строка 2 подразумевает строку 6, так что строку 6 можно опустить (как и прежде).
Строки 2 и 9 подразумевают функциональную зависимость CF —» AD (по правилу композиции), которая подразумевает функциональную зависимость CF —> ADC (по правилу дополнения), которая вместе со строкой 4 подразумевает функциональную зависимость CF -» В (по правилу транзитивности). Таким образом, строку 8 можно опустить.
На этом все операции вывода завершаются и множество становится неприводимым.
АВ -» С С —> А ВС -4 D CD —> В BE -» С СЕ -» F CF —> D D -» Е D -» F
Обратите внимание, что тем самым получено два разных неприводимых покрытия для исходного множества функциональных зависимостей. ЮЛЗ.Потенциальными ключами являются L, DPC и DPT.
10.14. Используя сокращенную запись N, R, С, Т и Z для атрибутов NAME, STREET, CITY, STATE и ZIP соответственно, можно получить следующие функциональные зависимости.
N —» RCT RCT —> Z Z —> СТ
Очевидно, что эквивалентным неприводимым множеством является следующее. N -> R N -> С N -> Т RCT -> Z Z -> С Z T Единственным потенциальным ключом является атрибут N.
10.15.Ответ к этому упражнению будет дан не полностью, хотя некоторые рассуждения здесь все же будут изложены. Во-первых, множество, очевидно, не является неприводимым, так как функциональные зависимости С —> J и CJ —* I совместно подразумевают зависимость С -» I. Во-вторых, очевидным суперключом является множество {A,B,C,D,G,J} (т.е. множество всех атрибутов, упомянутых в левых частях заданных функциональных зависимостей). Из этого множества можно исключить атрибут J, поскольку существует зависимость С —> J, а также исключить атрибут G, поскольку существует зависимость АВ -» G. Так как ни один из атрибутов А, В, С, D не находится в правой части любой заданной функциональной зависимости, множество {A,B,C,D} является потенциальным ключом.