Отношения во 2НФ и 3НФ

это домашнее задание, которое я уже сделал, мне просто нужно либо подтверждение, если оно сделано правильно, либо подсказки, как его решить. Спасибо.
Вот вопрос:

Отношение Вакцина предназначено для записи информации о младенцах и их прививках: когда конкретному младенцу была сделана определенная прививка; где проходила вакцинация; кто вводил вакцину. Ниже приводится реляционный заголовок:
Vaccine(VaccineCode, InfantId, Date, InfantName, InfantAddress, MedicalCentreCode,MedicalCentreName, MedicalCentreAddress,NurseId, NurseName)

Помимо функциональных зависимостей с первичным ключом в качестве определителя, Vaccine имеет следующие нетривиальные функциональные зависимости:
FD1:InfantId -> InfantName
FD2:InfantId -> InfantAddress
FD3:MedicalCentreCode -> MedicalCentreName< br> FD4:MedicalCentreCode -> MedicalCentreAddress
FD5:NurseId -> NurseName

Задайте это отношение сначала во 2НФ, а затем в 3НФ.

Мое решение:
2NF:
Infant(InfantID, InfantName,InfantAddress)
Rest(VaccineCode, InfandID, Date, MedicalCentreCode, MedicalCentreName, MedicalCentreAddress, МедсестраИд, МедсестраИмя)

Теперь Младенец находится во 2НФ, а также в 3НФ, но отношение Отдыха не в 3НФ. 3NF для всех этих отношений будет выглядеть так (по моему мнению, конечно):
Детали вакцинации(Код вакцины, InfantID, Дата, Медицинский центрКод медсестры)

Infant(InfantID, InfantName, InfantAddress)

Медицинский центр(Код медицинского центра, Имя медицинского центра, Адрес медицинского центра)

Медсестра(NurseId, NurseName)

Являются ли мои решения 2NF и 3NF?


person smallB    schedule 09.04.2012    source источник


Ответы (1)


2NF требует, чтобы отношение а) находилось в 1НФ и б) не имело частичных зависимостей ключей.

Проецирование Infant (InfantID, InfantName,InfantAddress) из исходного отношения правильно. InfantName и InfantAddress функционально зависят от InfantID; InfantID является частью ключа {VaccineCode, InfantId, Date}.

Теперь Младенец находится во 2НФ, а также в 3НФ, но отношение Отдыха не в 3НФ.

Это верно. 3НФ требует: а) отношение должно быть во 2НФ и б) не должно иметь транзитивных зависимостей. Существует одна транзитивная зависимость от {VaccineCode, InfantId, Date} до MedicalCentreCode и до {MedicalCentreName, MedicalCentreAddress}. Таким образом, удаление этой транзитивной зависимости с помощью проекции дает вам

  • Младенцы {InfantID, InfantName, InfantAddress}
  • Медицинские центры {Код медицинского центра, Имя медицинского центра, Адрес медицинского центра}
  • Прививки {VaccineCode, InfantID, Date, MedicalCentreCode, NurseId, NurseName}

И есть еще одна транзитивная зависимость, включающая NurseID и NurseName. Проецирование того, что дает вам

  • Младенцы {InfantID, InfantName, InfantAddress}
  • Медицинские центры {Код медицинского центра, Имя медицинского центра, Адрес медицинского центра}
  • Медсестры {NurseID, NurseName}
  • Прививки {VaccineCode, InfantID, Date, MedicalCentreCode, NurseId}

Все эти четыре отношения теперь находятся как минимум в 3NF. (Первые три находятся в 5NF.)

Не ограничивайтесь домашним заданием

Но с этим есть небольшая проблема. В настоящее время вы можете ввести код медицинского центра «Главная больница» и идентификационный номер медсестры, которая там не работает. Вы можете подумать о том, как бы вы выразили эту зависимость и как могли бы выглядеть результирующие отношения.

person Mike Sherrill 'Cat Recall'    schedule 09.04.2012
comment
Большое спасибо за ваш ответ. Так что в принципе то, что я сделал, правильно. Спасибо. - person smallB; 10.04.2012