【发布时间】:2014-03-27 16:57:52
【问题描述】:
所以我从这 3 个表开始,并被告知将它们修改为 BCNF 和 4NF:
PRIVATE_SESSION(培训师、电话、电子邮件、费用、ClientLastName、 ClientFirstName、ClientPhone、ClientEmail、日期、时间)
CLUB_MEMBERSHIP(客户编号、客户姓氏、客户名字、 ClientPhone、ClientEmail、MembershipType、EndingDate、街道、城市、 州,邮编)
CLASS(班级名称、培训师、开始日期、结束日期、费用)
*还建议使用一个新表来跟踪客户、订阅的课程和支付的金额,同时仍将所有内容保留在 BCNF 和 4NF 中
================================================ ===================
所以,我将它们变成了这 7 个表格,以尝试遵守 BCNF 和 4NF。问题是……这甚至是正确的吗?如果每个确定项都是候选键,则满足 BCNF 的定义,看起来就是这样。如果 4NF 不包含我相信的多值依赖项,则它是满意的……我尝试将表分开,这样它们就不会
培训师
ID (primary key),
TrainerLastName,
TrainerFirstName,
TrainerEmail,
TrainerPhone
培训师课程
ID (primary key),
ID (foreign key from CLIENT_INFO.ID)
TrainingStartTime,
TrainingStartDate,
TrainingFee
CLIENT_INFO
ID (primary key),
ClientLastName,
ClientFirstName,
ClientPhone,
ClientEmail,
会员地址
ID (primary key),
ID (foreign key to CLIENT_INFO.ID),
State,
City,
Street,
Zip
会员信息
ID (primary key),
ID (foreign key to CLIENT_INFO.ID),
MembershipType,
MembershipStartDate,
MembershipEndDate
CLUB_CLASS
ID (primary key),
TrainerID (foreign key to TRAINER.ID),
ClassName,
ClassStartDate,
ClassEndDate,
ClassCost
CLASS_ENROLLMENT
(ClassID, MemberID) composite primary keys
TotalClasses,
TotalPaid
【问题讨论】:
-
为什么
TRAIN_SESSION包含TrainerFirstName、TrainerLastName? (CLUB_CLASS也是如此)因此对我来说它看起来不是 2nf。 -
因为我很傻,把我之前做的复制错了。当然,这只适用于这两个......其他任何事情都是......或者是一个错误而不是
-
我看不出
CLASS_EXPENSE的意义。首先,原始表不对这些数据进行建模——您是否应该在原始模型中添加新概念?其次,不要直接存储聚合数据(AmountofClassesTaken、TotalAmountPaid),您应该对 Class_Member_Enrollment(ClassID, MemberID) 建模,并将这些记录相加得到总数。 -
啊,对不起,我忘了补充,我们还应该建议一个新表来跟踪客户、订阅的课程和支付的金额,同时仍将所有内容保留在 BCNF 和 4NF 中。我喜欢复合键的想法:D
-
@user2503165 - 所以我评论的第二部分仍然有效 - 你不是在模拟哪些成员注册了哪些课程。
标签: database database-normalization bcnf