Как разложить отношение в BCNF?

Предположим, у нас есть отношение, где:

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

{Доктор, Пациент}, {Пациент, Больница} или

{Доктор, Больница}, {Пациент, Больница} или

{Доктор, Больница}, {Доктор, Пациент}

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

Значит, {Доктор, Больница}, {Доктор, Пациент} будет правильным выбором?

1 ответ

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

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

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

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

Doctor → Hospital

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

Итак, разложение этого отношения в BCNF выглядит следующим образом:

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

R2 <(Doctor, Patient), { }>

(так что вы правы в своем предположении).

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

Patient, Hospital → Doctor

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

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

Другие вопросы по тегам