Here is the data I have to normalize:
//
1NF
客户ID [名字(PK),姓氏(PK),电话,地址,城镇,邮政编码,电子邮件]
预订[日期(PK),房间(PK),类型,住客,住宿,抵达时间]
ExtraID [项目名称,项目成本,日期(FK),房间(FK)]
//
名字+姓氏=复合键
日期+房间=复合键
//
这可以吗?
另外,要进入2NF,我必须识别部分依赖关系。据我所知,电话,地址,城镇,邮政编码和电子邮件需要复合键的两个部分? 这已经是2NF了吗?
谢谢。
答案 0 :(得分:0)
使用合成密钥通常是个好主意。这与人们有关,特别是---没有一个自然键真正适合主要目的(我们可能会在这里进入生物识别技术,但这有点偏离主题)。
因此,需要有一个客户表,其中包含自己的customers_pk主键,可以是RDBMS中的序列,也可以是GUID(http://en.wikipedia.org/wiki/Globally_unique_identifier)。
应该有一个房间的历史表 - 费率往往会改变,以及其他房间的特点。我们可以将房间定义为独特的物理对象,并且还可以决定房间在重塑后是否保持不变(有利有弊,这取决于商业观点)。
我会为额外内容创建一个单独的字典(我们可以在那里使用收据ID和CDR的引用),然后通过一个带有它自己的主键,预订主键和国外的外键的表来链接附加内容和预订。额外主键的关键。
现在,预订表应该有它自己的主键,然后是客户的密钥,房间的密钥,日期(它们可以是日期类型,或者我们可以创建一个单独的时间维度,我们可以列出各种有用的信息,例如它是否很高季节或如果有一些当地活动),占用人数,额外费用总和(好吧,可能不是所有想法中最好的)和赠款总额。
你可以为每个表的键使用一个单独的序列,或者只为所有表使用一个序列 - 后者更优雅一些。