1

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

功能依赖:X 决定一个且只有一个 Y (X->Y)

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

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

Primary Key:唯一的候选键(Selected the best Candidate key)

PERSONALTRAINER_SESSION

[列]

Trainer、TrainerPhone、TrainerEmail、TrainerFee、ClientLastName、ClientFirstName、ClientPhone、ClientEmail、TrainingDate、TrainingTime


现在,我知道在找出这些依赖关系时,我应该将注意力集中在表提供的列和数据上,而不是一般情况下,但似乎对我没有任何明确的依赖关系。例如,只需使用“培训师”列。我想“培训师”可以确定电子邮件或类似的东西……但这不是一个清晰简洁的联系吗?

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

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

任何关于如何以正确方式进行此操作的想法将不胜感激:D

==================================================== ======================= 编辑:好的,所以我已将此表更改为 3。

培训师

TrainerID, Trainer, TrainerPhone, TrainerEmail, TrainerFee

客户

ClientID、ClientLastName、ClientFirstName、ClientPhone、ClientEmail

训练课程

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

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

4

1 回答 1

1

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

对于规范化的家庭作业练习,通常不期望学生为键或其他任何东西发明新属性。要点通常是基于一组依赖关系对给定属性进行标准化综合。

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

考虑到这样一个任意的练习,我很想说唯一审慎的答案是一个以完整属性集为关键的单一关系。就这样吧。

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

于 2013-06-19T22:32:30.723 回答