Вы уже уменьшили левую сторону каждого FD в крышке. Следующим шагом является сокращение числа FD в этой обложке до минимума.
ли это, игнорируя один FD на время, а затем увидеть, если вы можете придумать и тот же набор зависимых атрибутов (закрытия) с помощью других FD-й в крышке с помощью LHS игнорируемых FD в качестве отправного точка. Если вы можете, то игнорируемый вами FD является избыточным и может быть сброшен с крышки. Сделайте это для каждого оставшегося FD. Осталось минимальное покрытие.
Сначала, используя все FD в исходной крышке, вы получите набор атрибутов , определяемый LHS FD, который вы проигнорируете. Для A
закрытия является:
A, B, C, D, E, F, G, H, J
Try remvoving A -> D
и пересчитывать закрытие ...
initial closure: A
use A -> C closure: A, C
use A -> H closure: A, C, H
use A -> J closure: A, C, H, J
use J -> D closure: A, C, D, H, J
use J -> G closure: A, C, D, G, H, J
use H -> B closure: A, B, C, D, G, H, J
use CD -> E closure: A, B, C, D, E, G, H, J
use CD -> F closure: A, B, C, D, E, F, G, H, J
можно получить тот же набор атрибутов никогда не ссылается на FD A -> D
так этот ФО является избыточным и может быть сброшен с крышки. Фактически мы могли бы остановить процесс после того, как D
появился в производном наборе атрибутов, но для завершения процесс был продолжен, чтобы доказать, что тот же набор атрибутов может быть достигнут с A -> D
.
Обратите внимание, что минимальная обложка для данного набора FD не обязательно должна быть уникальной. Однако любое заданное минимальное покрытие должно содержать тот же набор зависимостей, что и исходная обложка, так что удаление какой-либо одной зависимости от минимальной крышки не дает такого же закрытия.
Хорошее объяснение было дано [здесь] (http://stackoverflow.com/questions/10284004/minimal-cover-for-functional-dependcies) – Fabian