作为外键的复合密钥的一部分,避免冗余

时间:2015-04-29 09:05:59

标签: sql foreign-key-relationship compound-key

您好,我有一个像database tables这样的数据库 正如您所看到的,它是一个酒店数据库,其中包含有关预订,客户和房间的所有信息。问题在于预订和BookDates表。每个预订的客户都可以预订几个日期,而不必按任何顺序预订。这就是为什么我必须创建BookDates以避免这种情况enter image description here但是现在我遇到了如何关联这两个表的问题,因为我不能将复合键的部分与另一个表相关联。这就是BookDates表现在的样子。没有主键。enter image description here

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,可以这样表达:必须为表BookDates和Bookings之间的关系创建哪些关系(外键和主键)?

如果这是我要说的问题,请创建一个组合BookDates中两个字段的主键(组合必须是唯一的)。预订在BookNum上有主键。从BookDates中的字段BookNum到Bookings中的BookNum创建外键。

另一个注意点:我会将我的桌子和字段命名为单数。例如表BookDate,包含字段BookNum和Date。每条记录只包含一个bookDate。当您从表中检索多个项目时,您会有一个BookDate记录列表。

答案 1 :(得分:0)

在ER图中,对于BookDates表,我看到你已经将BookNum标记为PK& FK。 FK很好,但是使用BookNum字段作为PK将无法工作,因为BookNum可以重复并且不能是唯一的。您可以考虑以下选项:

  1. 在BookNum&上创建复合主键。 BookDates

  2. 添加新的BookDatesId作为主键,可以是Identity 列,并将其作为PK,它将是"代理键"。