2016-04-10 5 views
0

Предположим, у нас есть relation, где:Как разложить отношение в BCNF?

Пациент определяет врача, больница определяет доктора, а врач определяет больницу. Как мы разложим это на BCNF?

{доктор, Пациент}, {Пациент, больница} или

{доктор, больница}, {Пациент, больница} или

{Врач, Больница}, {D octor, Patient}

В моем понимании в отношении это должно быть 3NF, и если X → Y выполняется в R, для каждой зависимости в соотношении должно выполняться одно из следующего: X → Y тривиально функционально зависимый X является суперключ из R.

Так {доктор, больница}, {Доктор, пациент} будет правильный выбор?

+0

Отношение не должно «быть в 3nf», а остальное - в BCNF; просто остальное гарантирует BCNF (& 3NF). Хотя вы все исказили. Поэтому, пожалуйста, найдите определение BCNF и отредактируйте свой вопрос .. – philipxy

ответ

1

Во-первых, я думаю, что вы неправильно истолковали фигуру. Обозначения, используемые в нем, как правило, интерпретируется как описание следующих двух функциональных зависимостей:

Patient, Hospital → Doctor (1) 
Doctor → Hospital   (2) 

функциональная зависимость (1) означает, что для каждого пациента в определенной больнице присваивается уникальный врач, в то время как (2) означает, что каждый врач работает в уникальной больнице. В вашей интерпретации вместо этого каждая больница однозначно определяет врача, то есть в любой больнице есть только один врач!

Итак, учитывая приведенную выше интерпретацию, давайте посмотрим, есть ли отношение в BCNF. Отношение находится в НФБК, если каждый детерминант является ключевым (супер), и ясно, что зависимость:

Doctor → Hospital 

нарушает это условие, так как доктор не суперключ (то есть он не детерминированным все атрибуты). На самом деле это отношение имеет два кандидата ключей: (пациент, больница) и (пациент, доктор).

Таким образом, разложение этого соотношения в НФКАХ является следующим:

R1 <(Doctor, Hospital), { Doctor → Hospital }> 

R2 <(Doctor, Patient), { }> 

(так что вы правы в вашей догадке).

Обратите внимание, однако, что это разложение имеет неприятное свойство: потеря функциональной зависимости! Фактически, утеряна зависимость:

Patient, Hospital → Doctor 

Утеряно, то есть оно не может быть осуществлено в результирующей базе данных. Это означает, что можно вставить информацию о пациенте с врачом, который не находится в больнице, в которой находится пациент!

Наконец, обратите внимание, что поскольку Doctor является основным атрибутом (то есть он принадлежит к ключу-кандидату), начальное отношение уже находится в 3NF.

Смежные вопросы