Согласны ли вы с тем, что эта таблица нормализована в 3НФ?

Я проверял нормализацию таблиц и видел, к чему пришел:

Опишите и проиллюстрируйте процесс нормализации данных, показанных в этой таблице, к третьей нормальной форме (3NF):

BRANCH_NO(PK)  BRANCH_ADDRESS    TELL_NO    MANAGER_ID    MANAGER_NAME
B001           ADDRESS 1         TELL 1     S1500         TOM DANIELS
B002           ADDRESS 2         TELL 2     S0010         MARY MARTINEZ
B003           ADDRESS 3         TELL 3     S0145         ART PETERS
B004           ADDRESS 4         TELL 4     S2250         SALLY STEM 

После преобразования они получают эти две таблицы, которые, как они утверждают, находятся в 3NF:

BRANCH_NO(PK)  BRANCH_ADDRESS    TELL_NO    MANAGER_ID(FK)
B001           ADDRESS 1         TELL 1     S1500     
B002           ADDRESS 2         TELL 2     S0010     
B003           ADDRESS 3         TELL 3     S0145     
B004           ADDRESS 4         TELL 4     S2250

и

 MANAGER_ID(PK)    MANAGER_NAME
    S1500             TOM DANIELS
    S0010             MARY MARTINEZ
    S0145             ART PETERS
    S2250             SALLY STEM

Я думаю, очевидно, что первая таблица не является 3НФ. Например. : tell_no зависит от branch_addres, который не является первичным ключом, но первичный ключ функционально идентифицирует branch_address, который конфликтует с переходной функциональной зависимостью.


person user2128702    schedule 08.06.2014    source источник


Ответы (1)


Нормализация — это гарантия того, что схема базы данных точно представляет заданный набор зависимостей. Если вам не заданы зависимости для начала, то такое упражнение действительно сводится к догадкам и предположениям, основанным на наборе имен атрибутов и нескольких строках демонстрационных данных. Так что однозначного ответа на вопрос, что правильно, а что нет, быть не может. Это скорее случай понимания того, какие предположения делаются и каковы могут быть последствия. Запишите, какие зависимости вы ожидаете применить, а затем убедитесь, что схема нормализована по отношению к этим зависимостям.

Предположим, что каждый филиал должен иметь уникальный номер филиала и уникальный адрес, и поэтому мы хотим применить эти FD:

BRANCH_NO -> BRANCH_ADDRESS
BRANCH_ADDRESS -> BRANCH_NO
BRANCH_NO -> TEL_NO
BRANCH_NO -> MANAGER_ID -> MANAGER_NAME

Ваш проект с двумя таблицами удовлетворяет 3NF в отношении этих зависимостей, предполагая, что BRANCH_NO и BRANCH_ADDRESS оба будут ключами-кандидатами (вам нужно учитывать все ключи, а не только один первичный ключ).

Теперь это предполагает, что подразумеваемые зависимости от BRANCH_ADDRESS являются точными и достаточно важными, чтобы имело смысл обеспечить уникальность BRANCH_ADDRESS. Это может быть, а может и не быть, но именно поэтому вам нужно определить такие вещи, прежде чем вы сможете ответить на вопрос.

person nvogel    schedule 09.06.2014
comment
А минимальный ключ? Вы должны согласиться с тем, что BRANCH_NO однозначно идентифицирует каждую строку. Нам всегда нужно выбрать минимальный ключ в данном отношении. Допустим, я выбрал BRANCH_NO, который идентифицирует все остальные атрибуты. Но, с другой стороны, BRANCH_ADDRESS идентифицирует TELL_NO и MANAGER_ID. - person user2128702; 13.06.2014
comment
Все ключи являются минимальными суперключами. Для каждого отношения может быть более одного минимального суперключа. В этом случае, учитывая мой предполагаемый набор зависимостей, в отношении ветвления есть два таких ключа: BRANCH_NO и BRANCH_ADDRESS. Тот, который вы хотите выбрать в качестве основного, не имеет особого значения с точки зрения нормализации. - person nvogel; 13.06.2014
comment
Хорошо, допустим, в условии задачи было указано, что BRANCH_NO является первичным ключом таблицы? - person user2128702; 13.06.2014
comment
Нормализация связана с ключами-кандидатами и их суперключами. Выбор одного ключа в качестве основного не имеет никакого значения. - person nvogel; 13.06.2014