//
1NF
客户 ID [名字 (PK)、姓氏 (PK)、电话、地址、城镇、邮政编码、电子邮件]
预订 [日期(PK)、房间(PK)、类型、住户、夜晚、到达时间]
ExtraID [项目名称、项目成本、日期 (FK)、房间 (FK)]
//
名字 + 姓氏 = 复合键
日期 + 房间 = 复合键
//
这个可以吗?
另外要进入 2NF,我必须确定部分依赖关系。据我所知,电话、地址、城镇、邮政编码和电子邮件都需要组合键的两个部分?那么这已经在 2NF 中了吗?
谢谢你。
//
1NF
客户 ID [名字 (PK)、姓氏 (PK)、电话、地址、城镇、邮政编码、电子邮件]
预订 [日期(PK)、房间(PK)、类型、住户、夜晚、到达时间]
ExtraID [项目名称、项目成本、日期 (FK)、房间 (FK)]
//
名字 + 姓氏 = 复合键
日期 + 房间 = 复合键
//
这个可以吗?
另外要进入 2NF,我必须确定部分依赖关系。据我所知,电话、地址、城镇、邮政编码和电子邮件都需要组合键的两个部分?那么这已经在 2NF 中了吗?
谢谢你。
使用合成密钥通常是个好主意。这与人有关,尤其是——没有一个自然键真正适合主键目的(我们可能会在这里讨论生物识别,但这有点离题了)。
因此,需要有一个客户表,其主键可以是 RDBMS 中的序列,也可以是 GUID ( http://en.wikipedia.org/wiki/Globally_unique_identifier )。
应该有一个房间的历史表——价格往往会发生变化,以及其他房间的特征。我们可以将房间定义为唯一的物理对象,还可以决定房间在改造后是否保持不变(这有优缺点,这取决于业务角度)。
我将为附加信息创建一个单独的字典(我们可以在其中使用收据 ID 和 CDR 的引用),然后通过一个表将附加信息与预订链接,该表具有自己的主键、外键到预订主键和外键到附加信息首要的关键。
现在,bookings 的表应该有它自己的主键,然后是客户的键,房间的键,日期(它们可以是日期类型,或者我们可以创建一个单独的时间维度,我们可以在其中列出各种有用的信息,例如是否是旺季或是否有一些当地的活动),入住人数,额外费用的总和(嗯,可能不是所有想法中最好的)和赠款总额。
您可以为每个表的键使用单独的序列,也可以只为所有表使用一个序列——后者更优雅一些。