表中的功能和多值依赖关系

时间:2013-06-19 15:42:35

标签: database database-design

这是我在数据库书中分配的家庭作业。基本上我应该告诉其中哪些是功能依赖,哪些是多值依赖,比如说它是在BCNF还是4NF,然后提出一个更好的设计(如果需要又称另一个表),以便表格是在BCNF和4NF。到目前为止,这是我所知道的(或者至少我知道):

功能依赖性:X确定一个且仅一个Y(X-> Y)

多值依赖性:X确定多个Y(x-> Y)

候选键:可用作主键的唯一列

主键:唯一候选键(选择最佳候选键)

PERSONALTRAINER_SESSION

[列]

训练师, TrainerPhone, TrainerEmail, TrainerFee, ClientLastName, ClientFirstName, ClientPhone, clientEmail的, TrainingDate, TrainingTime


现在,我知道我应该在确定这些依赖关系时只关注表格提供的列和数据而不是一般情况,但我似乎没有任何明确的依赖关系。例如,只需选择“培训师”列。 “培训师”可以确定电子邮件或我认为类似的东西......但这不是一个清晰简洁的连接吗?

同样在候选键方面...... TrainerEmail,TrainerPhone,ClientEmail和ClientPhone似乎都是我可能的候选键。电话号码和电子邮件在现实生活中都是独一无二的,但我认为电话号码可能只对某个国家/地区而言是唯一的,而电子邮件在全球范围内是独一无二的。那么哪个表格是一个很好的主键?

也许我的想法不正确,但是家庭作业首先列出功能性和多值依赖性,然后重新配置表格,所以我想我在某处遗漏了某些东西。

如何以正确的方式解决这个问题的任何想法都将受到赞赏:D

=============================================== ========================== 编辑:好的,所以我把这个表改成了3。

TRAINER

TrainerID,Trainer,TrainerPhone,TrainerEmail,TrainerFee

客户端

ClientID,ClientLastName,ClientFirstName,ClientPhone,ClientEmail

TRAININGSESSION

TrainerID(外键),ClientID(外键),TrainingDate,TrainingTime

这会更有意义吗?使用单个复合键可能更有意义。

1 个答案:

答案 0 :(得分:1)

要了解一些已提出的建议:实际上电子邮件地址是否独一无二?实际上电话号码是唯一的吗?绝对是。事实上,事实总是可以从其他事实中唯一地识别出来,这对于培训师,客户以及您可能想要在数据库中记录的任何其他内容都是一样的。[*]这就是为什么在关系模型中我们将信息表示为由唯一元组组成的关系用钥匙。

对于规范化中的家庭作业练习,学生通常不会为钥匙或其他任何东西创造新的属性。重点通常是基于一组依赖关系来实现给定属性的规范化合成。

这里真正的问题是您需要在数据库中表示什么类型的事实(谓词)以及适用于它们的业务规则(依赖项)。您的问题不包括该信息 - 只有猜测和假设是可能的。

鉴于这种随意的练习,我很想说唯一谨慎的答案是以完整的属性为关键的单一关系。把它留在那。

[*为避免疑问:我并不断言电子邮件和电话号码是用于培训师或其他任何东西的正确钥匙。我的观点是,电子邮件本质上是“独特的”,就像任何其他事实一样,但没有进一步的问题上下文,没有充分理由说出电子邮件是否是一个有用的标识符,可以或应该作为数据库中的密钥实现]