Нахождение отношения в 3NF, но не в BCNF

Я читал много разных источников о том, как различать отношения в 3NF/BCNF. И я до сих пор это мое понимание ...

Я буду использовать это отношение в качестве примера...

R = {A, B, C, D, E}

а также

F = {A -> B, B C - > E, E D -> A}.

Сначала мы должны найти ключи отношения. Это видео помогло мне в этом. И я получил

Keys = {ACD, BCD, CDE}

Теперь, чтобы убедиться, что R находится в BCNF, мы должны убедиться, что левая часть каждой функциональной зависимости в F является одной из Keys. Мы сразу понимаем, что это не так, потому что первый FD — это A -> B, а A не является одним из ключей. Значит, его нет в BCNF.

Теперь, чтобы убедиться, что R находится в 3NF, мы должны убедиться, что левая часть каждой функциональной зависимости в F является одной из Keys ИЛИ правой частью каждой функциональная зависимость в F является подмножеством одного из Keys. Если вы посмотрите на правую часть каждого FD, это B, E и A. Каждый из них является подмножеством Key, так что это означает, что он находится в 3NF.

Итак, это один из редких случаев (согласно вики), когда отношение находится в 3NF, но не в BCNF. Правилен ли этот метод? Это надежно? Я что-то упустил?


person Ogen    schedule 15.05.2014    source источник
comment
Да, вы все сделали правильно.   -  person laurids    schedule 15.05.2014
comment
вы можете проверить это: class2go.stanford.edu/db/Winter2013   -  person laurids    schedule 15.05.2014


Ответы (2)


Сначала вам нужно изучить суперключи, ключи-кандидаты и первичные атрибуты.

Тем не менее, это эмпирическое правило помогает:

Таблица 3NF, которая не имеет нескольких перекрывающихся ключей-кандидатов, гарантированно находится в BCNF.

Другими словами, если ключи-кандидаты в отношении 3NF

  • все атомарно или
  • неатомарные, но не перекрывающиеся,

гарантируется, что отношение находится в НФБК.

Простейшее отношение, нарушающее BCNF, но удовлетворяющее 3NF, имеет следующие функциональные зависимости:

A,B -> C C -> B

В этом случае ключи-кандидаты — это (A,B) и (A,C).
Он соответствует 3NF, потому что

  • правая часть всех функциональных зависимостей является основным атрибутом.

Это нарушает BCNF, потому что

  • C -> B, но левая часть не является суперключом.
person AHA    schedule 04.11.2017

БКНФ:

X->Y, где Y может быть простым или не простым
Здесь X должен быть суперключом

3NF:

X->Y, где Y не простое число
, тогда
X должен быть суперключом
else
X не обязательно быть суперключом

Надеюсь это поможет

person Lordferrous    schedule 06.05.2015
comment
Это не ясно и не правильно. Посмотрите определения в некоторых учебниках или даже в википедии. - person philipxy; 03.05.2017
comment
Определения размыты. Например, для BCNF вы можете просто указать, что X должен быть суперключом. Определение 3NF правильное, но это самый сложный способ его описания! - person AHA; 04.11.2017