Here is the data I have to normalize:
//
1NF
客户 ID [名字 (PK)、姓氏 (PK)、电话、地址、城镇、邮政编码、电子邮件]
预订[日期(PK)、房间(PK)、类型、入住人数、天数、抵达时间]
ExtraID [元素名称、元素成本、日期 (FK)、房间 (FK)]
//
名字 + 姓氏 = 复合键
日期 + 房间 = 复合键
//
这样可以吗?
为了进入 2NF,我必须确定部分依赖关系。据我所知,电话、地址、城镇、邮政编码和电子邮件需要复合键的两个部分? 那么这已经在 2NF 中了吗?
谢谢。
最佳答案
使用合成 key 通常是个好主意。这与人有关,尤其是——没有一个自然键真正适合主键目的(我们可能会在这里讨论生物识别技术,但这有点偏离主题)。
因此,需要有一个具有自己的customers_pk 主键的客户表,该主键可以是RDBMS 中的序列,也可以是GUID ( http://en.wikipedia.org/wiki/Globally_unique_identifier )。
应该有一个房间的历史表——价格以及其他房间的特征往往会发生变化。我们可以将房间定义为唯一的物理对象,并决定房间在改造后是否保持不变(这有利有弊,这取决于商业立场)。
我会为附加服务创建一个单独的字典(我们可以在其中使用收据 ID 和 CDR 的引用),然后通过一个表将附加服务与预订链接起来,该表具有自己的主键、预订主键的外键和外键extra 主键的键。
现在,预订表应该有自己的主键,然后是客户的键、房间的键、日期(它们可以是日期类型,或者我们可以创建一个单独的时间维度,在其中我们可以列出各种有用的信息,例如是否高季节或是否有一些本地事件)、居住人数、额外费用总和(好吧,可能不是所有想法中最好的)以及补助金总额。
您可以为每个表的键使用单独的序列,也可以为所有表的键使用一个序列——后者更优雅一些。
关于mysql - 数据库数据标准化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697158/