2

我有关系

Competitor(PID, EventName, Pname, TeamName, TeamCoach,EventDate, TeamRating).

我有我的 FD

PID -> Pname
PID --> TeamName
TeamName --> TeamCoach
EventName --> EventDate
TeamName, EventName --> TeamRating

这将形成我的关系

Competitor(_PID_, Pname, TeamName*)
Team(_TeamName_, TeamCoach)
Event(_EventName_, EventDate)
Rating(_TeamName_*, _EventName_*, TeamRating)
Entry(_PID_*, _EventName_*)

但是,由于我的候选键是 {PID, EventName},如果 TeamName 甚至不是键的一部分,Team 关​​系怎么可能在 BCNF 中?

4

1 回答 1

3

您的问题中写下的一组 FD 适用于单个关系模式。应用于给定关系模式的 FD 集决定了该关系模式的

例如,您的 5 个 FD 集对应于您开始使用的 7 列关系模式。并且这组 FD 允许确定您的 7 列关系模式的键确实是 {PID EventName}。

但是,如果您将该 7 列模式分成几部分,那么这会产生哪些 FD 仍然适用以及哪些部分适用的后果。

例如。假设你单挑

 Team(_TeamName_, TeamCoach)

然后离开

 Competitor(PID, EventName, Pname, TeamName, EventDate, TeamRating).

对于每个单独的 FD,您现在必须决定单独的 FD 应用于两个新关系模式中的哪一个。

在手头的例子中:

 Team(_TeamName_, TeamCoach)
 TeamName --> TeamCoach

 Competitor(PID, EventName, Pname, TeamName, EventDate, TeamRating)
 PID -> Pname
 PID --> TeamName
 EventName --> EventDate
 TeamName, EventName --> TeamRating

您现在不仅有两个关系模式,而且有两组不同的 FD,分别适用于它们。teamname->teamcoach FD 现在不再适用于(修订的)竞争对手关系模式,而仅适用于团队模式。这使您可以得出结论,TeamName 将是Team 模式的关键。

顺便说一句,并非总是可以保留您开始使用的所有FD。一个 FD,其整体属性集(左侧加右侧)使得在模式拆分后,不再有任何包含所有这些属性的关系模式,这样的 FD 不能再被表达,并且必须在最终的设计中恢复为不采用 FD (/key) 形式的数据库约束。这就是“依赖保存”的问题。

于 2012-10-15T20:16:01.777 回答