Функциональные зависимости: замыкание, эквивалентность и правила вывода — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Оценка мощности замыкания)
м (rollbackEdits.php mass rollback)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 7: Строка 7:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Замыкание множества функциональных зависимостей <tex>S</tex> - множество всех функциональных зависимостей, обозначаемое <tex>S^+</tex>, которые следуют из заданного множества функциональных зависимостей <tex>S</tex>.
+
Замыкание множества функциональных зависимостей <tex>S</tex> {{---}} множество всех функциональных зависимостей, обозначаемое <tex>S^+</tex>, которые следуют из заданного множества функциональных зависимостей <tex>S</tex>.
 
}}
 
}}
 
=== Построение ===
 
=== Построение ===
Строка 23: Строка 23:
  
 
== Эквивалентность множеств функциональных зависимостей ==
 
== Эквивалентность множеств функциональных зависимостей ==
Здесь и далее <tex>S, P</tex> - множества функциональных зависимостей.
+
Здесь и далее <tex>S, P</tex> {{---}} множества функциональных зависимостей.
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
Строка 36: Строка 36:
  
 
=== Оценка мощности замыкания ===
 
=== Оценка мощности замыкания ===
Для начала оценим количество тривиальных ФЗ на <tex>n</tex> атрибутах. Количество способов выбрать <tex>k</tex> атрибутов из <tex>n</tex> для левой части ФЗ - <tex>{\binom {n}{k}}</tex>, количество способов выбрать непустое подмножество из левой части для правой - <tex>2^k - 1</tex>. Известно, что <tex>\sum _{k=0}^{n}{\binom {n}{k}}x^{k}=(1+x)^{n}</tex>. Значит количество тривиальных ФЗ: <tex>\sum _{k=0}^{n}{\binom {n}{k}}(2^{k} - 1)=O(3^{n})</tex>.
+
Для начала оценим количество тривиальных ФЗ на <tex>n</tex> атрибутах. Количество способов выбрать <tex>k</tex> атрибутов из <tex>n</tex> для левой части ФЗ {{---}} <tex>{\binom {n}{k}}</tex>, количество способов выбрать непустое подмножество из левой части для правой {{---}} <tex>2^k - 1</tex>. Известно, что <tex>\sum _{k=0}^{n}{\binom {n}{k}}x^{k}=(1+x)^{n}</tex>. Значит количество тривиальных ФЗ: <tex>\sum _{k=0}^{n}{\binom {n}{k}}(2^{k} - 1)=O(3^{n})</tex>.
Заметим, что при построении замыкания нельзя не учитывать тривиальные зависимости, так как при применении правил вывода, правила композиции, например, к нетривиальной и тривиальной зависимостям можно получить в итоге нетривиальную зависимость. Получается, что мощность порядка <tex>O(m3^n)</tex>, где <tex>m</tex> - количество базовых нетривиальных зависимостей.  
+
Заметим, что при построении замыкания нельзя не учитывать тривиальные зависимости, так как при применении правил вывода, правила композиции, например, к нетривиальной и тривиальной зависимостям можно получить в итоге нетривиальную зависимость. Получается, что мощность порядка <tex>O(m3^n)</tex>, где <tex>m</tex> {{---}} количество базовых нетривиальных зависимостей.  
  
 
На практике замыкания ФЗ не применимы, так как мощность в реальных приложениях слишком велика.
 
На практике замыкания ФЗ не применимы, так как мощность в реальных приложениях слишком велика.

Текущая версия на 19:13, 4 сентября 2022

Функциональные зависимости

Определение и примеры

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

Замыкание множества функциональных зависимостей

Определение:
Замыкание множества функциональных зависимостей [math]S[/math] — множество всех функциональных зависимостей, обозначаемое [math]S^+[/math], которые следуют из заданного множества функциональных зависимостей [math]S[/math].

Построение

Set<E> buildClosure(s: Set<E>): 
  closure = Set<E>(s)
  changed = true
  while (changed): 
    changed = false
    for f in closure:
       for rule in rules:     //rules - правила вывода
         new_f = rule.apply(f, closure)
         changed = closure.add(new_f)    //add - возвращает true, если элемент был добавлен, false - иначе
  return closure

Эквивалентность множеств функциональных зависимостей

Здесь и далее [math]S, P[/math] — множества функциональных зависимостей.

Определение:
[math]S[/math] слабее [math]P[/math] ([math]P[/math] накрывает [math]S[/math]) тогда и только тогда, когда [math]S^+[/math] является подмножеством [math]P^+[/math]:
[math]S \sqsubset P \Leftrightarrow S^+ \subset P^+[/math]


Определение:
[math]S[/math] эквивалентно [math]P[/math]:
[math]S \equiv P \, \Leftrightarrow \, S \sqsubset P \; \textrm{and} \; P \sqsubset S \, \Leftrightarrow \, S^+ = P^+ [/math]


Оценка мощности замыкания

Для начала оценим количество тривиальных ФЗ на [math]n[/math] атрибутах. Количество способов выбрать [math]k[/math] атрибутов из [math]n[/math] для левой части ФЗ — [math]{\binom {n}{k}}[/math], количество способов выбрать непустое подмножество из левой части для правой — [math]2^k - 1[/math]. Известно, что [math]\sum _{k=0}^{n}{\binom {n}{k}}x^{k}=(1+x)^{n}[/math]. Значит количество тривиальных ФЗ: [math]\sum _{k=0}^{n}{\binom {n}{k}}(2^{k} - 1)=O(3^{n})[/math]. Заметим, что при построении замыкания нельзя не учитывать тривиальные зависимости, так как при применении правил вывода, правила композиции, например, к нетривиальной и тривиальной зависимостям можно получить в итоге нетривиальную зависимость. Получается, что мощность порядка [math]O(m3^n)[/math], где [math]m[/math] — количество базовых нетривиальных зависимостей.

На практике замыкания ФЗ не применимы, так как мощность в реальных приложениях слишком велика.

Задача минимизации ФЗ

Постановка задачи

Найти минимальное множество ФЗ эквивалентное заданному. То есть необходимо найти множество ФЗ [math]P[/math] такое, что замыкание [math]S[/math] и [math]P[/math] совпадают и множество [math]P[/math] имеет меньшую мощность, чем [math]S[/math]. Это позволит снизить нагрузку на базу данных. Но такой подход к решению задачи не применим на практике из-за большой мощности замыкания.