Мат.методы хранения данных. Лекция Исчисление доменов Реляционное исчисление, ориентированное на домены (исчисление доменов), отличается от исчисления кортежей тем, что в нем вместо переменных кортежей используются переменные доменов, т.е. переменные, принимающие свои значения в пределах домена, а не отношения. Основным формальным отличием исчисления доменов от исчисления кортежей является наличие дополнительного множества предикатов, позволяющих выражать так называемые условия принадлежности (членства). Пусть R – это n-арное отношение с атрибутами A1, A2, ..., An, тогда в общем виде условие принадлежности можно записать так R (ai1:Vi1, ai2:Vi2, ..., aim:Vim) где R— имя переменной-отношения, где А— атрибут переменной-отношения R, aij значения атрибутов Aj, а V— имя переменной домена или литерально задаваемая константа (m≤n). Условие принадлежности принимает значение true в том и только в том случае, если в отношении R существует кортеж, содержащий указанные значения указанных атрибутов aij. Если Vij – константа, то на атрибут aij накладывается жесткое условие, не зависящее от текущих значений доменных переменных; если же Vij – имя доменной переменной, то условие принадлежности может принимать разные значения при разных значениях этой переменной. Пример 6.1. Рассмотрим результат вычисления следующего выражения: SP(S#:S1, P#:P1). Он будет иметь значение истина тогда и только тогда, когда в переменной-отношении SР будет существовать кортеж со значением атрибута S#, равным 'S1', и значением атрибута Р#, равным 'Р1'. Аналогично. Условие принадлежности SP(S#:SX, P#:PX) принимает значение истина тогда и только тогда, когда в переменной-отношении SР существует кортеж со значением атрибута S#, равным текущему значению переменной домена SХ (какому бы то ни было), и значением атрибута Р#, равным текущему значению переменной домена РХ (опять же, какому бы то ни было). S Поставщики S# SNAME STATUS S1 Smith 20 S2 Jones 10 S4 Clark 20 S5 Adams 30 SP Поставки S# P# QTY S1 P1 300 S1 P3 400 S1 P6 100 S2 P1 300 S3 P2 200 S4 P4 300 S4 P5 400 CITY London Paris London Athens P Детали P# P1 P2 P3 P4 P5 P6 PNAME COLOR WEIGHT CITY Nut Red 12.0 London Bolt Green 17.0 Paris Screw Blue 17.0 Rome Screw Red 14.0 London Cam Blue 12.0 Paris Cog Red 19.0 London Таблица 6.1 База данных Поставщики-Детали Определим домены и переменную домена БД «Поставщики-Детали» (табл. 6.2) Домен Переменная домена комментарии TS# TP# TNAME TCOLOR TWEIGHT TQTY CHAR INTEGER SX, SY PX, PY NAMEX, NAMEY COLORX, COLORY WEIGHTX, WEIGHTY QTYX, QTYY CITYX, CITYY STATUSX, STATUSY Номер поставщика Номер детали Название поставщика/детали Цвет детали Вес детали Количество деталей Название города поставщика/детали Статус города поставщика Таблица 6.2 Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 1 Мат.методы хранения данных. Лекция Примеры выражений исчисления доменов. Пример 6.2. SX Данное выражение означает множество всех номеров поставщиков. Пример 6.3. Множество всех номеров поставщиков в переменной-отношении S. SX WHERE S ( S#:SX ) Пример 6.4. Найти подмножество номеров поставщиков из Лондона» SX WHERE S ( S#:SX, CITY:'London' ) Пример 6.5. Определить номера поставщиков и названия городов, в которых находятся поставщики детали с номером 'Р2'. ( SX, CITYX ) WHERE S ( S#:SX, CITY: CITYX ) AND SP ( S#:SX, P#: P2) Пример 6.6. Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и деталь не находятся в одном городе (SX, PX) WHERE S (S#:SX, CITY:CITYX) AND P (P#:PX, CITY:CITYY) AND CITYX≠CITYY Пример 6.7. Выбрать номера поставщиков из Парижа со статусом, большим 20 SX WHERE EXISTS STATUSX (STATUSX > 20 AND S (S#:SX, STATUS:STATUSX, CITY:'Paris')) Пример 6.8. Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе (SX AS SA, SY AS SB) WHERE EXSIST CITYZ ( S (S#:SX, CITY:CITYZ) AND S (S#:SY, CITY:CITYZ) AND SX < SY ) Пример 6.9. Определить имена поставщиков по крайней мере одной красной детали NAMEX WHERE EXISTS SX EXISTS PX ( S (S#:SX, SNAME:NAMEX) AND SP (S#:SX, P#:PX) AND P (P#:PX, COLOR:'Red') ) Пример 6.10. Определить имена поставщиков всех типов деталей, поставляемых поставщиком с номером 'S2' NAMEX WHERE EXISTS SX EXISTS PX (S (S#:SX, SNAME:NAMEX ) AND SP (S#:SX, P#:PX ) AND SP (S#:S2, P#:PX) ) Пример 6.11. Выбрать имена поставщиков всех типов деталей NAMEX WHERE EXISTS SX (S (S#:SX, SNAME:NAMEX) AND FORALL P# (IF P (P#:PX) THEN SP (S#:SX, P#:PX) END IF ) Пример 6.12. Определить имена поставщиков, которые не поставляют деталь с номером ‘P2' NAMEX WHERE EXISTS SX(S (S#:SX, SNAME:NAMEX) AND NOT SP(S#:SX, P#:P2)) Пример 6.13. Определить номера поставщиков всех типов деталей, которые поставляются также поставщиком с номером 'S2' SX WHERE FORALL PX (IF SP (S#:S#(S2), P#:PX) THEN SP (S#:SX, P#:PX ) END IF ) Пример 6.14. Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 'S2', либо и то, и другое PX WHERE EXISTS WEIGHTX (P (P#:PX, WEIGHT:WEIGHTX) AND WEIGHTX>16.0) OR SP (S#:S2, P#:PX) Пример 6.15. ППФ исчисления доменов СТУДЕНТ(НОМЕР_Л_Д:1235 , ФИО:‘Гришин Г. Г.’ , ГРУППА:’У-11’, Специальность :‘Сист.Управ.’) примет значение true в том и только в том случае, когда в теле отношения СТУДЕНТ содержится кортеж <1235 , ‘Гришин Г. Г.’ ,’У-11’,‘Сист. Управ.’> Исчисление доменов, как и исчисление кортежей, формально эквивалентно реляционной алгебре (т.е. оно реляционно полно) Функциональные зависимости (ФЗ) Функциональная зависимость (functional dependence или functional dependency (FD) в англоязычной литературе) является связью типа "многие к одному" между множествами атрибутов внутри данной переменной-отношения. Говоря о переменной-отношении, следует четко различать конкретное значение переменной-отношения в определенный момент времени (реализацию) и набор всех возможных значений, которые переменная-отношение может принимать в различные Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 2 Мат.методы хранения данных. Лекция моменты времени. Говоря здесь о моментах времени, мы неявно рассматриваем процессы заполнения и последующей модификации переменной-отношения. Определение функциональной зависимости для набора всех возможных значений, которые может принимать переменная-отношение. Пусть R есть переменная-отношение, A— множество атрибутов R, X и Y — произвольные подмножества множества A, X={X1, …, Xk}, Y={Y1, …, Ym}. Обозначим через pi(X) кортеж из проекции R на множество атрибутов X, а через pi(Y)— кортеж из проекции R на множество атрибутов Y, pi(X) , pi(Y) состоят из элементов кортежа ri. Y функционально зависимо от X, (X→Y) тогда и только тогда, когда для любого допустимого значения переменной-отношения R и любых двух кортежей r1 и r2 из R из совпадения p1(X) и p2(X) следует совпадение p1(Y) и p2(Y). Другими словами, если два кортежа переменной-отношения R совпадают по значению X (p1(X) = p2(X)), они также совпадают и по значению Y (p1(Y) =p2(Y)). X→Y ⇔ (p1(X)=p2(X)) ⇒ (p1(Y)=p2(Y)). Опуская приведенные выше точные формулировки, говорят, что для любого допустимого значения переменной-отношения R каждое значение X связано с одним значением Y. Пример 6.16. SP S# Поставки P# QTY S1 S1 S1 S2 S3 S4 S4 P1 P3 P6 P1 P2 P4 P5 300 400 100 300 200 300 400 Для переменной-отношения поставок SР (табл.6.3) существует ФЗ между множествами атрибутов {S#, Р#} и {QTY}({S#, Р#}→{QTY}). Это означает, что для любого допустимого значения этой переменной-отношения для любой заданной пары значений атрибутов S# и Р# существует только одно соответствующее им значение атрибута ОТY. Вообще говоря, нельзя достоверно утверждать, что указанная ФЗ имеет место не только для данной конкретной реализации. Этот вопрос требует дополнительного исследования. Таблица 6.3 Пример 6.17. Рассмотрим переменную-отношение SCP, полученную из переменной-отношения SP добавлением дополнительного атрибута CITY — города соответствующего поставщика (см. табл. 6.4). Отношение SСР удовлетворяет требованиям для ФЗ атрибуSCP тов {S#} и {CITY}, поскольку все кортежи отношения SCP с S# CITY P# QTY одинаковыми значениями атрибута S# имеют одно и то же S1 London P1 100 значение атрибута CITY. {S#}→{CITY} S1 London P2 100 Можно полагать, что эта зависимость имеет место для любых возможных значений переменной-отношения SCP. S2 Paris P1 200 Кроме того, для данной реализации отношения имеют место S2 Paris P2 200 и другие зависимости. S3 Paris P2 300 • {S#, P#}→{QTY} S4 London P2 400 • {S#, P#}→{CITY} • {S#, P#}→{CITY, QTY} S4 London P4 400 S4 London P5 400 • • {S#, P#}→{S#} {S#, P#}→{S#, P#, CITY, QTY} Таблица 6.4 Пример o {S#}→{QTY} {QTY}→{S#} значения переменнойотношения SCP Множество атрибутов в левой части записи функциональной зависимости иногда называют детерминантом, а множество атрибутов в правой части — зависимой частью. Когда множество содержит только один атрибут, оно называется одноэлементным множеством, скобки опускаются и символическая запись принимает более простой вид, например, S#→ CITY. Некоторые из перечисленных ФЗ выполняются всегда, для набора всех возможных значений, которые может принимать переменная-отношение, другие же выполняются только в конкретной реализации переменной-отношения. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 3 Мат.методы хранения данных. Лекция Несколько безотносительных ко времени ФЗ, выполняющихся для переменнойотношения SCP: {S#, P#} → QTY {S#, P#} → CITY {S#, P#} → {CITY, QTY} {S#, P#} → S# {S#, P#} → {S#, P#, CITY, QTY} {S#} → CITY Зависимости, которые выполняются для отношения, представленного в таблице 6.4, но не выполняются "всегда" для переменной-отношения SCP. S# → QTY QTY → S# Иначе говоря, утверждение "число деталей для каждой поставки данного поставщика одинаково", истинно для конкретных значений, присутствующих в отношении в таблице 6.4, но ложно для всех возможных допустимых значений переменной-отношения SCP. Нас будут интересовать только ФЗ, выполняющиеся для всех возможных значений данной переменной-отношения. Например, в случае переменной-отношения SCP ФЗ S#→ CITY выполняется для всех возможных значений переменной-отношения SCP, поскольку в любой момент одному поставщику соответствует в точности один город. По этой причине любые два кортежа переменной-отношения SCP в один и тот же момент и с одним и тем же номером поставщика должны соответствовать одному и тому же городу. ФЗ, которые должны быть верны для любого допустимого значения переменнойотношения R, могут рассматриваться как ограничения целостности переменнойотношения R. Утверждение, что данная ФЗ выполняется "всегда" (т.е. для всех возможных значений SCP), является ограничением целостности для переменной-отношения SCP, поскольку при этом накладываются определенные ограничения на все ее допустимые значения. Формулировка этого ограничения. CONSTRAINT S#_CITY_FD COUNT (SCP {S# }) = COUNT (SCP {S#, CITY}) Выражение S# → CITY может расцениваться как сокращенный способ представления этой более длинной формулировки. Если X является потенциальным ключом переменной-отношения R, то все атрибуты Y переменной-отношения R должны обязательно быть функционально зависимы от X. Аналогично в переменной-отношении деталей Р необходимо, чтобы всегда выполнялась следующая зависимость. P# → {P#, PNAME, COLOR, WEIGHT, CITY} Если переменная-отношение R удовлетворяет ФЗ А → В и А не является потенциальным ключом, то R будет характеризоваться избыточностью. Наличие в переменной-отношении SCP ФЗ S#→ CITY приведет к тому, что сведения о месте расположения поставщика в определенном городе повторятся (табл. 6.4). Выявление зависимостей между атрибутами необходимо для выполнения проектирования БД методом нормальных форм. Полный набор функциональных зависимостей, выполняющихся для всех допустимых значений заданной переменной-отношения, может быть очень большим. Т.к. ФЗ являются ограничениями целостности, при каждом обновлении данных в базе СУБД вынуждена будет проверять соблюдение всех этих ограничений. Поэтому количество ФЗ надо уметь сокращать до некоторого разумного количества. Следовательно, для каждого заданного множества функциональных зависимостей S желательно найти такое множество Т, которое (в идеальной ситуации) было бы существенно меньше множества S и при этом каждая функциональная зависимость в множестве S могла бы быть заменена функциональной зависимостью из множества Т. Если бы такое множество Т было найдено, то СУБД достаточно было бы контролировать выполнение функциональных зависимостей из множества Т, что автоматически подразумевало бы соблюдение всех функциональных зависимостей из множества S. Именно поэтому задача поиска подходящего множества Т имеет большое практическое значение. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 4 Мат.методы хранения данных. Лекция Тривиальные и нетривиальные зависимости Очевидным способом сокращения существующего набора функциональных зависимостей является исключение из него тривиальных зависимостей. Зависимость А → В называется тривиальной, если В ⊆ А (т.е. множество атрибутов А включает множество В или совпадает с ним). Тривиальная зависимость выполняется всегда. Пример 6.18. Тривиальная функциональная зависимость в переменной-отношении SCP. {S#, P#}→S# Тривиальные зависимости нельзя трактовать как ограничения целостности, с практической точки зрения они не представляют никакого интереса. Однако в формальной теории зависимостей необходимо учитывать все зависимости, как тривиальные, так и нетривиальные. Замыкание множества зависимостей Множество всех функциональных зависимостей, логически выводимых из множества функциональных зависимостей S, называется замыканием множества функциональных зависимостей S и обозначается S+. Например, из зависимости {S#, P#} → {CITY, QTY} можно логически вывести следующие функциональные зависимости. {S#, P#} → CITY {S#, P#} → QTY В отношении P рассмотрим ФЗ {P#}→ {PNAME} и {PNAME}→ {WEIGHT}. Из приведенных зависимостей можно вывести функциональную зависимость {P#}→{WEIGHT } Функциональная зависимость A→C называется транзитивной, если существует такой атрибут B, что имеются функциональные зависимости A→B и B→C и отсутствует функциональная зависимость C→A. Для решения задачи анализа ФЗ необходимо найти способ вычисления S+ на основе S. Первая попытка решить эту проблему была предпринята Армстронгом, который предложил набор правил вывода новых ФЗ на основе заданных. Пусть А, В и С — произвольные подмножества множества атрибутов заданной переменной-отношения R. Обозначим через АВ объединение множеств А и В (А∪В). Правила вывода имеют следующий вид. 1. Правило рефлексивности: если множество B является подмножеством множества А, то B функционально зависимо от A (если B ⊆ A, то А→В). 2. Правило пополнения: если (А→В⇒АС→ВС). 3. Правило транзитивности: если A → В и В → С, то А → С. Каждое из этих трех правил может быть непосредственно доказано на основе определения функциональной зависимости. Истинность первого правила Армстронга следует из того, что при B ⊆ A функциональная зависимость А → В является тривиальной. Покажем справедливость второго правила (А→В⇒АС→ВС). Справедливость второго правила докажем от противного. Предположим, что ФЗ AC→BC не соблюдается. Это означает, что в некотором допустимом теле отношения найдутся два кортежа t1 и t2, такие, что t1(AC) = t2(AC), (1) , но t1(BC) ≠t2(BC). (2) Здесь t(A) обозначает проекцию кортежа t на множество атрибутов A. Поскольку A ⊆ AC, по аксиоме рефлексивности АC → A.Следовательно, по определению ФЗ из равенства t1(AC)=t2(AC) следует равенство t1(A)=t2(A). Поскольку имеется ФЗ A→B, то из равенства t1(A)=t2(A) следует равенство t1(B)=t2(B). Тогда из последнего равенства и неравенства (2) следует, что t1(C)≠t2(C), что противоречит наличию тривиальной ФЗ AC→C. Следовательно, предположение об отсутствии ФЗ AC→BC неверно. Второе правило вывода доказано. Докажем справедливость третьего правила Армстронга ((A → В)∧(В → С) ⇒ (А → С)). Предположим, что существуют ФЗ А→В и В→С, но A→C не имеет места. Последнее означает, что в некотором допустимом теле отношения найдутся два кортежа t1 и t2, такие, что t1(A)=t2(A), но t1(C)≠t2(C). Но из наличия ФЗ A→B следует, что из равенства Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 5 Мат.методы хранения данных. Лекция t1(A)=t2(A) вытекает равенство t1(B)=t2(B). Из наличия ФЗ B→C следует, что из равенства t1(B) = t2(B) вытекает равенство t1(C) = t2(C), что противоречит предположению об отсутствии ФЗ A→C. Третье правило вывода доказано. Можно доказать, что система правил вывода Армстронга полна и совершенна в том смысле, что для данного множества функциональные зависимости S любая ФЗ, потенциально выводимая из S, может быть получена на основе этих правил. Применение указанных правил не может привести к выводу ФЗ, которые не принадлежат множеству S+ (S+—замыкание множества ФЗ S) Следовательно, эти правила можно использовать для получения замыкания S+. (Поскольку эти правила по форме похожи на систему аксиом некоторой формальной теории, их также часто называют аксиомами Армстронга.) С целью упрощения задачи практического вычисления замыкания S+ из трех приведенных выше правил можно вывести несколько дополнительных правил. Пусть D — некоторое произвольное подмножество множества атрибутов R. 4. Правило самодетерминированности: А→А. 5. Правило декомпозиции: если А→ВС, то А→В и А→С. 6. Правило объединения: если А→В и А→С, то А→ВС. 7. Правило композиции: если А→В и С→D, то АС→ВD. Правило 4 непосредственно вытекает из правила 1. Покажем справедливость правила 5. Заметим, что по правилу 1 из B⊆BC следует, что BC→B. Тогда по правилу 3 из А→ВС и ВС→B следует, что А→В. Аналогично, из C⊆BC следует, что BC→C, а из А→ВС и BC→C вытекает А→С. Покажем справедливость правила 6. По правилу 2 из А→В следует, что АA→AВ, а последнее равносильно А→AВ. Из A→C по правилу 2 можно получить АB→СB. Заметим, что BC=CB, т.к. В∪C =C∪В , и следовательно имеет место АB→BC. Из A→AВ и АB→BC согласно правилу 3 имеем A→ВС. Для доказательства правила 7 также воспользуемся правилами 2 и 3. Из А→В следует АС→ВС, а из С→D — BС→BD. Из АС→ВС и BС→BD по правилу 3 получаем АС→ВD. 1. 2. 3. 4. 5. 6. 7. Правило Правило Правило Правило Правило Правило Правило рефлексивности: пополнения: транзитивности: самодетерминированности: декомпозиции: объединения: композиции: B⊆A ⇒ А→В А→B ⇒ АС→ВС А→В и B → С ⇒ А → С А→A А→ВС ⇒ А→В и А→С А→В и A→C ⇒ A→ВС А→В и C→D ⇒ AС→ВD Пример 6.18. Пусть дана некоторая переменная-отношение R с атрибутами A, В, С, D, Е, F и имеют место следующие функциональные зависимости. {А}→{В, С} {В}→{Е} {С, D}→{Е, F} Покажем, что для переменной-отношения R выполняется ФЗ {А,D}→{F}, которая принадлежит к замыканию заданного множества функциональных зависимостей. 1. 2. 3. 4. 5. 6. Дана ФЗ {А} → {В,С} Из ФЗ {А}→{В,С} по правилу декомпозиции (5) следует ФЗ {А}→{С}; Из ФЗ {А} → {С} по правилу пополнения (2) следует ФЗ {А,D}→{С,D}; ФЗ {С,D}→{Е,F} —дана по условию; Из ФЗ {А,D}→(С,D} и {С,D}→{Е,F} по правилу транзитивности (3)⇒ ФЗ {А,D}→{Е,F}; Из ФЗ {А,D} → {Е,F} по правилу декомпозиции (5) следует {А,D}→{F}; Замыкание множества атрибутов В принципе, замыкание S+ для заданного множества ФЗ S можно вычислить с помощью следующего алгоритма: "Применять правила из предыдущего раздела до тех пор, пока создание новых функциональных зависимостей не прекратится". Однако, на практике редко требуется вычислить замыкание само по себе, и поэтому только что упомянутый алгоритм вряд ли будет достаточно эффективным. Чаще требуется вычислить некоторое подмножество замыкания, а именно — подмножество, состоящее из всех ФЗ с некоторым заданным множеством Z атрибутов, расположенных слева в записи {A}→{B,C}. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 6 Мат.методы хранения данных. Лекция Пусть заданы отношение R, множество Z атрибутов этого отношения (подмножество заголовка R, или составной атрибут R) и некоторое множество ФЗ S, выполняемых для R. Множество всех атрибутов переменной-отношения R, которые ФЗ от Z называются замыканием Z+ множества Z в пределах S Алгоритм вычисления замыкания Z+. Дано: 1. Отношение R. 2. Множество Z атрибутов отношения R(подмножество заголовка R, или составной атрибут R),|Z|=m. 3. Множество функциональных зависимостей S вида X → Y, |S|=n Найти: замыкания Z+ Алгоритм. CloseZ := Z; // на0–м шаге замыкание равно самому множеству Z Repeat CloseZ_Old := CloseZ; // сохраняем старое значение замыкания For J:=1 To n Do Begin Взять очередную j-ю ФЗ X → Y из S; If X ⊆ CloseZ // проверяем является ли X подмножеством CloseZ Then CloseZ := CloseZ UNION Y; // Да, добавляем в множество // CloseZ новый элемент Y End; Until CloseZ =CloseZ_Old; Z+:= CloseZ; Две переменные CloseZ, CloseZ_Old для обозначения замыкания нам понадобились для корректной записи условия завершения работы алгоритма. Пример 6.19 Дано 1. Отношение R с заголовком {А, B, С, D, Е F} 2. Множество атрибутов Z={А,B} 3. Множество ФЗ S ={{А}→{В,C}, {Е}→{С,F}, {B}→{E}, {C,D}→{E,F}} Требуется найти {A,B}+ над S. Вычислим замыкание {А,В}+ множества атрибутов {А,В}, исходя из заданного множества S ФЗ, |S|=4. 1. Присвоим замыканию CloseZ начальное значение — множество {А,В}. 2. Выполним внутренний цикл For четыре раза — по одному разу для каждой ФЗ из множества S. 1) На первом шаге рассматривается зависимость {А} → {В,С}. Поскольку A является подмножеством замыкания CloseZ={А,В}, то атрибуты В и С добавляются в множество CloseZ. Замыкание CloseZ получает значение {А,В,С}. 2) На втором шаге рассматривается зависимость {Е} → {С,F}. Т.к., что {E} не является подмножеством {А,В,С}, замыкание CloseZ остается неизменным. 3) На третьем шаге (для зависимости {B} → {E}) множество {Е} будет добавлено к замыканию CloseZ, которое теперь будет иметь вид {А,В,С,Е}. 4) На четвертом шаге (для зависимости {C,D} → {E,F}) замыкание CloseZ останется неизменным, поскольку{C,D}⊄{А,B,C,E}. Внутренний цикл завершен. 3. Значение замыкания CloseZ изменилось по сравнению со старым значением, хранящемся в переменной CloseZ_Old. Внешний цикл Repeat повторяется еще раз. Далее внутренний цикл выполняется еще четыре раза для каждой зависимости из множества S. На первом шаге множество не изменится, на втором шаге (зависимость {Е} →{С,F}) в множество CloseZ={А,B,C,E} добавится элемент F, CloseZ ={А,В,С,Е, F }, а на третьем и четвертом щаге CloseZ не изменится. 4. Значение замыкания CloseZ опять изменилось по сравнению со старым значением CloseZ_Old. Внешний цикл Repeat повторяется еще раз, но в процессе работы цикВиноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 7 Мат.методы хранения данных. Лекция ла замыкание CloseZ останется неизменным, и алгоритм завершит работу с результатом {А,В}+ = {А,В,С,Е,F}. Пример 6.20 Дано: 1. Отношение R с заголовком {A, B, C, D, E, F}; 2. Множество атрибутов отношения R Z={A,E} 3. Множество ФЗ S = {{A}→{D}, {A,B}→{E}, {B,F}→{E}, {C,D}→{F}, {E}→{C}}. Требуется найти {A,E}+ над S. 1. Присвоим замыканию CloseZ начальное значение — множество {А,Е}. 2. Выполним внутренний цикл For пять раз — по одному разу для каждой ФЗ из множества S. 1) Рассмотрим зависимость {A}→{D} Т.к. множество {A} является подмножеством замыкания CloseZ ({A}⊂{A,E}), то атрибут D добавляется в множество CloseZ. Замыкание CloseZ получает значение {А,D,E}. 2) {A,B}→{E}. {A,B} не является подмножеством множества CloseZ ({A,B}⊄{А,D,E}). Замыкание CloseZ остается неизменным. 3) Зависимость {B,F}→{E}. Видим, что детерминант зависимости также не является подмножеством множества CloseZ ({B,F}⊄{А,D,E}), замыкание CloseZ остается неизменным 4) Зависимость {C,D}→{F}. Замыкание CloseZ также останется неизменным поскольку {C,D}⊄{А,D,E}. 5) Рассмотрим последнюю зависимость из множества S {E}→{C}. Множество {E} является подмножеством замыкания CloseZ ({E}⊂{А,D,E}), добавляем атрибут С в множество замыкания CloseZ. Замыкание CloseZ теперь представляет собой множество {А,С,D,E}. Внутренний цикл завершен. 3. Значение замыкания CloseZ = {А,С,D,E} изменилось по сравнению со старым значением, хранящемся в переменной CloseZ_Old. Внешний цикл Repeat повторяется еще раз. Внутренний цикл For выполняется пять раз. На первых трех шагах результат останется прежним. Для зависимости {A}→{D} имеем {A}⊂{A,С,D,E}, но атрибут D уже входит в множество {A,С,D,E}. Для зависимостей {A,B}→{E} и {B,F}→{E} имеем {A,B}⊄{А,С,D,E} и {B,F}⊄{А,С,D,E}. На четвертом шаге для зависимости {C,D}→{F} видим, что {C,D}⊂{A,С,D,E}. Добавляем атрибут F в множество замыкания CloseZ. Замыкание CloseZ теперь представляет собой множество {А,С,D,E,F}. 4. Значение замыкания CloseZ={А,С,D,E,F} опять изменилось по сравнению со старым значением CloseZ_Old. Внешний цикл Repeat повторяется еще раз. Внутренний цикл выполняется пять раз, но замыкание CloseZ останется неизменным и весь процесс завершится с результатом {А,E}+={А,С,D,Е,F}. Алгоритм вычисления замыкания Z+ для заданного множества ФЗ S позволяет легко указать, будет ли заданная функциональная зависимость X→Y следовать из S, т.к. это возможно тогда и только тогда, когда множество Y является подмножеством замыкания X+ множества X для заданного множества S. Иначе говоря, алгоритм представляет простой способ определения, будет ли данная функциональная зависимость X→Y включена в замыкание S+ множества S. ФЗ важны при выявлении суперключей отношения при проектировании базы данных. Суперключ K переменной-отношения R — это множество атрибутов переменнойотношения R, которое в виде подмножества (необязательно собственного) содержит, по крайней мере, один потенциальный ключ. Суперключи для данной переменной-отношения R— это такие подмножества K множества атрибутов переменной-отношения R, что ФЗ K→А будет истинна для каждого атрибута A переменной-отношения R. Используя понятие замыкания множества можно сформулировать определение суперключа следующим образом. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 8 Мат.методы хранения данных. Лекция Множество К является суперключом тогда и только тогда, когда замыкание К+ для множества К в пределах заданного множества ФЗ является множеством абсолютно всех атрибутов переменной-отношения R. Кроме того, множество K является потенциальным ключом тогда и только тогда, когда оно является неприводимым суперключом. Неприводимые множества зависимостей Пусть S1 и S2 — два множества функциональных зависимостей. Если любая функциональная зависимость, которая выводится из множества зависимостей S1, также выводится из множества зависимостей S2 ,т.е. если замыкание S1+ является подмножеством замыкания S2+, то множество S2 называется покрытием для множества S1. Это значит, что если СУБД обеспечит соблюдение ограничений, представленных зависимостями множества S2, то автоматически будут соблюдены и все ограничения, устанавливаемые зависимостями множества S1. Если множество S2 является покрытием для множества S1, а множество S1 одновременно является покрытием для множества S2 (т.е. если S1+=S2+), то множества S1 и S2 эквивалентны. Если множества S1 и S2 эквивалентны, то соблюдение СУБД ограничений, представленных зависимостями множества S2, автоматически обеспечит соблюдение ограничений, представленных зависимостями множества S1, и наоборот. Множество ФЗ S называется неприводимым тогда и только тогда, когда оно обладает следующими свойствами. 1. Правая (зависимая) часть каждой ФЗ из множества S содержит только один атрибут (т.е. является одноэлементным множеством). 2. Левая часть (детерминант) каждой ФЗ из множества S является неприводимой, т.е. ни один атрибут из детерминанта не может быть опущен без изменения замыкания S+ (без конвертирования множества S в некоторое иное множество, не эквивалентное множеству S). В этом случае ФЗ называется неприводимой слева. 3. Ни одна ФЗ из множества S не может быть удалена из множества S без изменения его замыкания S+ (т.е. без конвертирования множества S в некоторое иное множество, не эквивалентное множеству S). В литературе подобное множество часто называется минимальным. Не всегда обязательно иметь точную информацию о составе замыкания S+ для получения ответа на вопрос, изменится ли это замыкание при удалении из исходного множества какой-либо ФЗ. Пример 6.21. Рассмотрим переменную-отношение деталей P со следующими функциональными зависимостями. P#→PNAME P#→COLOR P#→WEIGHT P#→CITY Это множество ФЗ является неприводимым: правая часть каждой зависимости содержит только один атрибут, а левая часть, очевидно, является неприводимой. Кроме того, ни одна из перечисленных ФЗ не может быть опущена без изменения замыкания множества (т.е. без утраты некоторой информации). Примеры множеств ФЗ не являющихся неприводимыми. 1. P#→{PNAME, COLOR} P#→WEIGHT P#→CITY (Правая часть первой ФЗ не является одноэлементным множеством.) 2. (P#, PNAME)→COLOR P#→PNAME P#→WEIGHT P#→CITY (Первую ФЗ можно упростить, опустив атрибут PNAME в левой части без изменения замыкания, т.е. она не является неприводимой слева.) Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 9 Мат.методы хранения данных. Лекция 3. P#→P# P#→PNAME P#→COLOR P#→WEIGHT P#→CITY Здесь первую ФЗ можно опустить без изменения замыкания. Утверждение. Для любого множества ФЗ существует по крайней мере одно эквивалентное множество, которое является неприводимым S-. Пусть дано исходное множество зависимостей S. 1. Благодаря правилу декомпозиции ({А}→{В,С} ⇒ {А}→{В} и {А}→{С}) можно без утраты общности предположить, что каждая ФЗ в этом множестве S имеет одноэлементную правую часть. 2. Для каждой зависимости f из этого множества S следует проверить каждый атрибут A в левой части зависимости f. Если множество S и множество зависимостей, полученное в результате устранения атрибута A в левой части зависимости f, эквивалентны, значит, этот атрибут следует удалить. 3. Для каждой оставшейся в множестве S зависимости f, если множества S и S\f эквивалентны, следует удалить зависимость f из множества S. Получившееся в результате таких действий множество S- является неприводимым и эквивалентно исходному множеству S. Пример 6.22. Пусть дана переменная-отношение R с атрибутами А, В, С, D и следующими ФЗ. {A}→{B,C} {B}→{C} {A}→{B} {B}→{C} {AC}→{D} Найдем неприводимое множество ФЗ, эквивалентное данному множеству. 1. Перепишем заданные ФЗ таким образом, чтобы каждая из них имела одноэлементную правую часть. {А}→{В} {А}→{С} {В}→{С} {А}→{В} {А,В}→{С} {А,С}→{D} Заметим, что зависимость {А}→{В} записана дважды, одну из них можно удалить. 2. Затем в левой части зависимости {А,С}→{D} может быть опущен атрибут С, поскольку дана зависимость {А}→{С}, из которой по правилу пополнения( 2: {А}→{В}⇒{А,С}→{В,С}) можно получить зависимость {А}→{А,С}. Кроме того, дана зависимость {А,С}→{D}, из которой по правилу транзитивности можно получить зависимость {А}→{D}. Таким образом, атрибут С в левой части исходной зависимости {А,С}→{D} является избыточным. 3. Далее можно заметить, что зависимость {А,В}→{С} может быть исключена, поскольку дана зависимость {А}→{С}, из которой по правилу пополнения можно получить зависимость {А,В} →{С,В}, а затем по правилу декомпозиции — зависимость {А,В}→{С}. 4. Наконец зависимость {А}→{С} выводится зависимостями {А}→{В} и {В}→{С}, так что она также может быть отброшена. В результате мы получили неприводимое множество зависимостей. {А → В, В → С, А → D} Множество ФЗ I, которое неприводимо и эквивалентно другому множеству функциональных зависимостей S, называется неприводимым покрытием множества S. Таким образом, с тем же успехом в системе вместо исходного множества ФЗ S может использоваться его неприводимое покрытие I (для вычисления неприводимого эквивалентного покрытия I необязательно вычислять замыкание S+). Однако необходимо отметить, что для заданного множества ФЗ не всегда существует уникальное неприводимое покрытие. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 10 Мат.методы хранения данных. Лекция Отметим, что многое из вышесказанного можно обобщить на ограничения целостности. Следующие утверждения являются верными. • Существуют тривиальные ограничения целостности. • Существуют ограничения целостности, логически выводимые из других ограничений. • Множество всех ограничений, логически выводимых из заданного множества, может рассматриваться как замыкание этого множества. Выяснение вопроса, будет ли некоторое ограничение, принадлежать некоторому замыканию (т.е. будет ли заданное ограничение выводится из некоторых данных ограничений), является очень важной практической задачей. Не менее важной практической задачей является поиск неприводимого покрытия для некоторого заданного множества установленных ограничений. Однако следует заметить, что благодаря наличию исчерпывающего и полного множества правил вывода, работать с функциональными зависимостями удобнее, чем с ограничениями целостности. _________________________________________________________________ Упражнения к семинару 6. 1. Пусть R является переменной-отношением степени n. Каково максимальное количество ФЗ (как тривиальных, так и нетривиальных), которые могут выполняться для переменной-отношения R? 2. Пусть дана переменная-отношение R с атрибутами A, B, C, D, E, F, G и следующими ФЗ: {{A→B},{B,C}→{D,E}, {A,E,F}→{G}} Вычислите замыкание {А,С}+ для данного множества ФЗ. Можно ли вывести зависимость {A,C,F}→{D,G} из функциональных зависимостей этого множества? 3. Определите, эквивалентны ли два приведенных ниже множества функциональных зависимостей, установленных для переменной-отношения R{А,В,С,D,Е}. 1. {{А}→{В}, {А,В}→{С}, {D}→{А,С}, {D}→{Е}} 2. {{А}→{В,С}, {D}→{А,Е}} 4. Найдите неприводимое покрытие приведенного ниже множества функциональных зависимостей, заданных для переменной-отношения R {А,В,С,D,Е,F}. {{А,В}→{С}, {С}→{А}, {B,С}→{D}, {А,С,D}→{В}, {В,Е}→{С}, {C,Е}→{F,А}, {С,F}→{В,О}, {D}→{Е,F}}. Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана. 11