-1

这是我必须标准化的数据:

//

1NF

客户 ID [名字 (PK)、姓氏 (PK)、电话、地址、城镇、邮政编码、电子邮件]

预订 [日期(PK)、房间(PK)、类型、住户、夜晚、到达时间]

ExtraID [项目名称、项目成本、日期 (FK)、房间 (FK)]

//

名字 + 姓氏 = 复合键

日期 + 房间 = 复合键

//

这个可以吗?

另外要进入 2NF,我必须确定部分依赖关系。据我所知,电话、地址、城镇、邮政编码和电子邮件都需要组合键的两个部分?那么这已经在 2NF 中了吗?

谢谢你。

4

1 回答 1

0

使用合成密钥通常是个好主意。这与人有关,尤其是——没有一个自然键真正适合主键目的(我们可能会在这里讨论生物识别,但这有点离题了)。

因此,需要有一个客户表,其主键可以是 RDBMS 中的序列,也可以是 GUID ( http://en.wikipedia.org/wiki/Globally_unique_identifier )。

应该有一个房间的历史表——价格往往会发生变化,以及其他房间的特征。我们可以将房间定义为唯一的物理对象,还可以决定房间在改造后是否保持不变(这有优缺点,这取决于业务角度)。

我将为附加信息创建一个单独的字典(我们可以在其中使用收据 ID 和 CDR 的引用),然后通过一个表将附加信息与预订链接,该表具有自己的主键、外键到预订主键和外键到附加信息首要的关键。

现在,bookings 的表应该有它自己的主键,然后是客户的键,房间的键,日期(它们可以是日期类型,或者我们可以创建一个单独的时间维度,我们可以在其中列出各种有用的信息,例如是否是旺季或是否有一些当地的活动),入住人数,额外费用的总和(嗯,可能不是所有想法中最好的)和赠款总额。

您可以为每个表的键使用单独的序列,也可以只为所有表使用一个序列——后者更优雅一些。

于 2013-10-31T08:35:23.390 回答