Функциональные зависимости: замыкание атрибутов, неприводимые множества функциональных зависимостей, их построение — различия между версиями
Darkey (обсуждение | вклад) (→Замыкание атрибутов) |
м (rollbackEdits.php mass rollback) |
||
(не показано 28 промежуточных версий 3 участников) | |||
Строка 2: | Строка 2: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | Замыкание множества атрибутов <tex>X</tex> над множеством ФЗ <tex>S</tex> - максимальное по включению множество атрибутов <tex>X^+_S</tex> функционально зависящих от <tex>S</tex>. | + | Замыкание множества атрибутов <tex>X</tex> над множеством ФЗ <tex>S</tex> {{---}} максимальное по включению множество атрибутов, обозначаемое <tex>X^+_S</tex>, функционально зависящих от <tex>S</tex>. |
}} | }} | ||
Строка 15: | Строка 15: | ||
Данная теорема позволяет проверять эквивалентность множеств ФЗ без вычисления замыканий ФЗ: <br/> | Данная теорема позволяет проверять эквивалентность множеств ФЗ без вычисления замыканий ФЗ: <br/> | ||
− | Даны множества <tex>S</tex> и <tex>P | + | Даны множества функциональных зависимостей <tex>S</tex> и <tex>P</tex>, необходимо проверить является ли <tex>P</tex> эквивалентным <tex>S</tex>, то есть требуется показать, что <tex>S^+ \subset P^+</tex> и <tex>P^+ \subset S^+</tex>. Теорема выше позволяет проверять принадлежит ли ФЗ некоторому замыканию функциональных зависимостей, тогда чтобы показать, что <tex>S^+ \subset P^+</tex> достаточно проверить, что <tex>\forall A \to B \in S</tex> выполняется <tex>A \to B \subset P^+</tex>, то есть для каждой базовой функциональной зависимости <tex>A \to B</tex> из <tex>S</tex> построить <tex>A^+_P</tex> замыкание атрибутов над <tex>P</tex> и проверить, что <tex>B \subset A^+_P</tex>. |
− | |||
{{Утверждение | {{Утверждение | ||
|statement= | |statement= | ||
− | '''Следствие''':<br/><tex>X</tex>- надключ <tex> \Leftrightarrow X^+ </tex> - множество всех атрибутов | + | '''Следствие''':<br/><tex>X</tex> {{---}} надключ <tex> \Leftrightarrow X^+ </tex> {{---}} множество всех атрибутов |
|proof= | |proof= | ||
− | <tex>(=>)</tex><br>По определению замыкания атрибутов, | + | <tex>(=>)</tex><br>По определению замыкания атрибутов, так как все атрибуты функционально зависят от <tex>X</tex>.<br/> |
− | <tex>(<=)</tex><br><tex>X^+</tex> - множество всех атрибутов и по теореме <tex>\exists \; X \to X^+</tex>, то по определению функциональной зависимости <tex>X</tex> соответствует ровно один <tex>X^+</tex> и значит <tex>X</tex> - надключ. | + | <tex>(<=)</tex><br><tex>X^+</tex> {{---}} множество всех атрибутов и по теореме <tex>\exists \; X \to X^+</tex>, то по определению функциональной зависимости <tex>X</tex> соответствует ровно один <tex>X^+</tex> и значит <tex>X</tex> {{---}} надключ. |
}} | }} | ||
Данное следствие позволяет формально выделять ключи и надключи. | Данное следствие позволяет формально выделять ключи и надключи. | ||
− | === Построение === | + | === Построение замыкания атрибутов === |
− | <tex>X_S^*</tex> | + | <tex>X_S^* = X</tex> \\<tex>X_S^*</tex> исходно совпадает с множеством, замыкание атрибутов которого ищем |
'''do''' | '''do''' | ||
− | '''foreach''' <tex>A \ | + | '''foreach''' <tex>A \to B \in S</tex>: \\<tex>S</tex> {{---}} множество ФЗ |
'''if''' <tex>A \subset X_S^*</tex> then <tex> X_S^* = X_S^* \cup B</tex> | '''if''' <tex>A \subset X_S^*</tex> then <tex> X_S^* = X_S^* \cup B</tex> | ||
'''while''' есть изменения | '''while''' есть изменения | ||
Строка 38: | Строка 37: | ||
|statement=<tex>X^+_S = X^*_S</tex> | |statement=<tex>X^+_S = X^*_S</tex> | ||
|proof= | |proof= | ||
− | 1) <tex>X_S^+ \supset X_S^* </tex> <br | + | 1) <tex>X_S^+ \supset X_S^* </tex> <br> |
− | <tex>A \subset X_S^* => X \to A</tex>(по правилу расщепления, | + | <tex>A \subset X_S^* => X \to A</tex>(по правилу расщепления, так как <tex>X_S^*</tex> изначально содержит в себе <tex>X</tex>) <tex>=> X \to B </tex>, то есть <tex>B</tex> входит в замыкание. <br> |
2) <tex>X_S^+ \subset X_S^* </tex> <br/> | 2) <tex>X_S^+ \subset X_S^* </tex> <br/> | ||
− | Доказательство от обратного: Пусть <tex>X_S^+ \not\subset X_S^* => \exists A: A \in X_S^+ \text{ and } A \not\in X_S^*.\; A \in X_S^+ => X \to A =></tex> есть вывод <tex> X \to X_1^+, ..., X_n^+ \to A</tex>. В этой цепочке найдём первую свежую ФЗ, то есть она не была в базовых ФЗ <tex>X</tex>. Такая | + | Доказательство от обратного: Пусть <tex>X_S^+ \not\subset X_S^* => \exists A: A \in X_S^+ \text{ and } A \not\in X_S^*.\; A \in X_S^+ => X \to A =></tex> есть вывод <tex> X \to X_1^+, ..., X_n^+ \to A</tex>. В этой цепочке найдём первую свежую ФЗ, то есть она не была в базовых ФЗ <tex>X</tex>. Такая функциональная зависимость точно есть в этой цепочке, например, <tex>X_n^+ \to A</tex>, так как <tex>A \in X_S^+ \text{ and } A \not\in X_S^* => </tex> такое правило не могло быть в <tex>X</tex>. Получается, что атрибут A не был добавлен в <tex>X^*_S</tex> в алгоритме, такое может быть только если атрибут A уже содержался в <tex>X => </tex> противоречие. |
}} | }} | ||
Строка 48: | Строка 47: | ||
|definition= | |definition= | ||
Множество ФЗ <tex>S</tex> '''неприводимо''', если: <br> | Множество ФЗ <tex>S</tex> '''неприводимо''', если: <br> | ||
− | * Каждая правая часть ФЗ содержит один атрибут | + | * Каждая правая часть ФЗ содержит ровно один атрибут |
* Каждая левая часть ФЗ минимальна по включению | * Каждая левая часть ФЗ минимальна по включению | ||
* <tex>S</tex> минимально по включению | * <tex>S</tex> минимально по включению | ||
}} | }} | ||
+ | |||
+ | {{Определение | ||
+ | |definition= | ||
+ | Множество ФЗ <tex>S</tex> '''минимально по включению''', если ни одна функциональная зависимость из множества <tex>S</tex> не может быть удалена из | ||
+ | множества <tex>S</tex> без изменения его замыкания <tex>S^+</tex>. | ||
+ | }} | ||
+ | |||
+ | {{Теорема | ||
+ | |id=proposalfirstcorrect | ||
+ | |statement=Для любого множества ФЗ существует эквивалентное неприводимое множество ФЗ (НМФЗ). | ||
+ | |proof= Доказательство по построению: <br> | ||
+ | * По правилу расщепления делаем все части единичными. Понятно, что замыкание множества ФЗ от такой операции не изменится, так как старая ФЗ может быть получена по правилу объединения. | ||
+ | * Для каждого правила пытаемся минимизировать по включению левую часть всеми возможными способами. Чтобы проверить, что атрибут X можно удалить из <tex>A \cup \{X\} \to B</tex>, нужно проверить, что если <tex>B \subset A^+_S</tex> выполняется, то <tex>A \to B</tex>, то можно минимизировать левую часть, отбросив <tex>X</tex>. Потенциально из одной ФЗ может получиться множество ФЗ, где левая часть минимальна по включению. | ||
+ | * Пытаемся удалить по одному правилу <tex>A \to B</tex>. Если <tex>B \subset A^+_{S\backslash\{A \to B\}} \to B</tex>, то по теореме <tex>A \to B \in S^+</tex>, значит это правило можно удалить. | ||
+ | }} | ||
+ | |||
+ | === Оценка времени построения НМФЗ === | ||
+ | * Расщепление правых частей - линейно по размеру правых частей. | ||
+ | * Удаление атрибута <tex>A \cup \{X\} \to B</tex>. На данном этапе из одной ФЗ возможно получить множество ФЗ минимальных по включению. Синтетическая оценка множества потенциальных множеств минимальных по включению мощностью <tex> {\frac {n}{2}}</tex> это <tex>{\binom {n}{{\frac {n}{2}}}} \approx 2^n </tex>. То есть на ФЗ с большой левой частью возможен экспоненциальный рост количества ФЗ с минимальной по включению левой частью. Но на реальных данных большая левая часть в ФЗ практически не встречается. | ||
+ | * Удаление правила <tex>A \to B</tex>. На этом этапе не добавляем ФЗ, а только удаляем, поэтому сложность этот этап не добавит. Заметим, что каждую ФЗ на этом этапе можно рассматривать лишь один раз, так как все операции по приведению множества к неприводимому сохраняют исходное замыкание ФЗ. | ||
+ | |||
+ | === Замечания о НМФЗ === | ||
+ | * Неприводимые множества ФЗ обычно много меньше множеств исходного множества ФЗ. | ||
+ | * Неприводимое множество ФЗ может не являться минимальным по мощности. |
Текущая версия на 19:06, 4 сентября 2022
Замыкание атрибутов
Определение: |
Замыкание множества атрибутов | над множеством ФЗ — максимальное по включению множество атрибутов, обозначаемое , функционально зависящих от .
Максимальный размер равен числу атрибутов в отношении.
Основное свойство замыкания множества атрибутов
Теорема: |
Доказательство: |
По определению замыкания атрибутов. |
Данная теорема позволяет проверять эквивалентность множеств ФЗ без вычисления замыканий ФЗ:
Даны множества функциональных зависимостей и , необходимо проверить является ли эквивалентным , то есть требуется показать, что и . Теорема выше позволяет проверять принадлежит ли ФЗ некоторому замыканию функциональных зависимостей, тогда чтобы показать, что достаточно проверить, что выполняется , то есть для каждой базовой функциональной зависимости из построить замыкание атрибутов над и проверить, что .
Утверждение: |
Следствие: — надключ — множество всех атрибутов |
— множество всех атрибутов и по теореме , то по определению функциональной зависимости соответствует ровно один и значит — надключ. |
Данное следствие позволяет формально выделять ключи и надключи.
Построение замыкания атрибутов
\\ исходно совпадает с множеством, замыкание атрибутов которого ищем do foreach : \\ — множество ФЗ if then while есть изменения
Теорема: |
Доказательство: |
1) |
Неприводимые множества функциональных зависимостей
Определение: |
Множество ФЗ
| неприводимо, если:
Определение: |
Множество ФЗ | минимально по включению, если ни одна функциональная зависимость из множества не может быть удалена из множества без изменения его замыкания .
Теорема: |
Для любого множества ФЗ существует эквивалентное неприводимое множество ФЗ (НМФЗ). |
Доказательство: |
Доказательство по построению:
|
Оценка времени построения НМФЗ
- Расщепление правых частей - линейно по размеру правых частей.
- Удаление атрибута . На данном этапе из одной ФЗ возможно получить множество ФЗ минимальных по включению. Синтетическая оценка множества потенциальных множеств минимальных по включению мощностью это . То есть на ФЗ с большой левой частью возможен экспоненциальный рост количества ФЗ с минимальной по включению левой частью. Но на реальных данных большая левая часть в ФЗ практически не встречается.
- Удаление правила . На этом этапе не добавляем ФЗ, а только удаляем, поэтому сложность этот этап не добавит. Заметим, что каждую ФЗ на этом этапе можно рассматривать лишь один раз, так как все операции по приведению множества к неприводимому сохраняют исходное замыкание ФЗ.
Замечания о НМФЗ
- Неприводимые множества ФЗ обычно много меньше множеств исходного множества ФЗ.
- Неприводимое множество ФЗ может не являться минимальным по мощности.