Процедура, которая немного более формальна.
Возьмите FD, например (пример 2), AB -> CD.
Увеличивайте это, используя тривиальные FD, пока не получите ВСЕ атрибутына RHS.
Вам не хватает ABE на RHS, поэтому вы должны увеличить с помощью тривиального FD ABE -> ABE, чтобы получить ABE -> ABCDE.
Это говорит о том, что ABE - это суперключпотому что знание значений в определенной строке для ABE будет достаточно для определения значений для всех атрибутов в этой строке.
Теперь осмотрите ДРУГИЕ FD, чтобы увидеть, позволяет ли какой-либо из них уменьшить LHS (ABE) в этом случае.E -> A позволяет вам удалить A из ABE, сохраняя при этом только BE -> ABCDE.Правило сокращения таково: если LHS другого FD (E) является правильным подмножеством суперключа, который вы пытаетесь уменьшить (ABE), то вы можете удалить все атрибуты из суперключа, которые упоминаются ТОЛЬКО в RHS этогодругой FD (вы не можете удалить E, если вы смотрите на «другой» FD, такой как E -> EA !!!).
Эта процедура не подходит для механической реализации, потому что вам также может потребоватьсявзгляд на "комбинации" других FD.Тем не менее, большинство сценариев использования и даже большинство сфабрикованных классных упражнений, как правило, не достаточно сложны, чтобы заставить эту процедуру завершиться с ошибкой (то есть оставить вас с правильным суперключем вместо неприводимого).
(PS, чтобы найти ВСЕ ключи, вам нужно будет применить это ко ВСЕМ данным FD)