2014-06-08 1 views
1

Я проверял таблицу нормализации и посмотреть, что я пришел:Согласны ли вы, что эта таблица нормализована 3NF

описать и проиллюстрировать процесс нормализации данных, представленные в этой таблице в третью нормальную формы (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 

После thei трансформации они в конечном итоге с этих двух таблиц, которые утверждают, что они оба находятся в 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 

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

ответ

1

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

Давайте предположим, что каждый филиал должен иметь уникальный номер филиала и уникальный адрес, и поэтому мы хотим, чтобы обеспечить соблюдение этих FDS:

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. Это может быть или не быть, но именно поэтому вам нужно определить такие вещи, прежде чем вы сможете ответить на вопрос.

+0

Как насчет минимального ключа? Вы должны согласиться с тем, что BRANCH_NO однозначно идентифицирует каждую строку. Нам всегда нужно выбрать минимальный ключ в данном соотношении. Предположим, что я выбрал BRANCH_NO, который идентифицирует все остальные атрибуты. Но с другой стороны BRANCH_ADDRESS идентифицирует TELL_NO и MANAGER_ID. – user2128702

+0

Все ключи являются минимальными супер-ключами. Для каждого может быть более одного минимального суперкласса. В этом случае, учитывая мой предполагаемый набор зависимостей, в отношении «ветви» есть два таких ключа: BRANCH_NO и BRANCH_ADDRESS. Какой бы вы ни выбрали, как «первичный», не имеет особого значения в плане нормализации. – sqlvogel

+0

Хорошо, скажем, что в состоянии задачи было указано, что BRANCH_NO является основным ключом таблицы? – user2128702