Найдите ключи и разложите их в BCNF

У меня есть такое отношение:

wiki(url,title,abstract,link,category_id,category,heading,heading_pos)

А ФД это:

F = {
    url → title, abstract
    category_id → category
    url, heading_pos → heading
}

Мне нужно найти ключи и разложить на набор нормализованных отношений Бойса-Кодда. Я пытался читать связанные и похожие вопросы, но я не могу понять данные ответы. Надеюсь кто-нибудь поможет мне с этим заданием


person DannyBoy    schedule 21.03.2016    source источник


Ответы (1)


Предположим, что 'wiki' является отношением R, а его атрибуты url,title,..heading_pos равны A,B,...H соответственно.

У нас есть,

R = {A,B,C,D,E,F,G,H}
FD's = {A->BC, E->F, AH->G}

Ключевым моментом здесь является ADEH.

Мы можем сначала преобразовать отношение R в 3NF, а затем в BCNF.

Чтобы преобразовать отношение R и набор функциональных зависимостей (FD's) в 3NF, вы можете использовать синтез Бернштейна. Чтобы применить синтез Бернштейна -

  • Сначала мы убеждаемся, что заданный набор FD's является минимальным покрытием.
  • Во-вторых мы берем каждый FD и делаем его собственной подсхемой.
  • В-третьих, мы пытаемся объединить эти подсхемы

Например в вашем случае:

Сначала мы проверяем, является ли FD's минимальным покрытием (одноэлементная правая сторона , нет постороннего атрибута левой стороны, нет избыточного FD)

  • Singleton RHS: мы пишем FD с singleton RHS. Итак, теперь у нас есть FD как {A-> B, A-> C, E-> F, AH-> G}
  • Нет лишнего атрибута LHS. Мы удаляем лишние атрибуты LHS, если они есть. Никаких посторонних атрибутов LHS здесь нет.
  • Никаких избыточных FD: мы удаляем избыточные зависимости, если таковые имеются. Здесь нет лишних зависимостей.

Во-вторых, мы создаем для каждой FD собственную подсхему. Итак, теперь у нас есть - (ключи для каждого отношения выделены жирным шрифтом)

R1={A,B}
R2={A,C}
R3={E,F}
R4={A,H,G}< бр>

В-третьих, мы объединяем все подсхемы с одним и тем же LHS. Итак, теперь у нас есть -

S1 = {A,B,C}
S2 = {E,F}< br> S3 = {A,H,G}

Поскольку ни одно из приведенных выше декомпозированных отношений не содержит ключа R, нам необходимо создать дополнительную схему отношения, содержащую атрибуты, образующие ключ R. Это необходимо для обеспечения декомпозиции соединения без потерь, которая сохраняет зависимости. Итак, мы добавляем -

S4 = {A,D,E,H}

Это в 3NF. Теперь, чтобы проверить BCNF, мы проверяем, есть ли какие-либо из этих отношений (S1,S2,S3, S4) нарушают условия BCNF (т. е. для каждой функциональной зависимости X->Y левая часть (X) имеет быть суперключом). В этом случае ни один из них не нарушает BCNF, и, следовательно, он также разлагается на BCNF.

Примечание. В этом примере важность некоторых из этих шагов может быть неясна. Посмотрите другие примеры здесь и здесь.

person Karup    schedule 29.03.2016
comment
Я с вами до третьей части, пока вы не добавите S4 = {A,D,E,H}. И спасибо за ваш ответ. Я знаю, что твой ответ правильный. - person DannyBoy; 31.03.2016
comment
Это потому, что A, D, E, H - это минимальный ключ-кандидат? - person DannyBoy; 31.03.2016
comment
Поскольку ни одно из разложенных отношений (S1,S2,S3) не имеет A,D,E и H (атрибуты ключа), т.е. ни одно из них по отдельности не содержит все 4 атрибута ключа, нам нужно добавить еще одно отношение (S4), которое не содержит . Это необходимо для обеспечения декомпозиции без потерь. Также ни у одного из S1, S2 или S3 не было атрибута D. Мы не можем просто удалить атрибут из отношения R после декомпозиции. - person Karup; 31.03.2016
comment
Это еще один очень похожий вопрос. - person Karup; 31.03.2016
comment
Спасибо за ваш ответ. Думаю, теперь я это понимаю. - person DannyBoy; 31.03.2016