这是我在我的数据库书中分配的家庭作业。基本上我应该知道哪些是函数依赖,哪些是多值依赖,比如它是在 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
这会更有意义吗?也许使用单个复合键更有意义。