【问题标题】:Part of a compund key as a foreign key avoiding redundancy复合键的一部分作为外键避免冗余
【发布时间】:2015-04-29 09:05:58
【问题描述】:

您好,我有一个这样的数据库.
如您所见,这是一个酒店数据库,其中包含有关预订、客户和房间的所有信息。问题在于 bookings 和 BookDates 表。每个进行预订的客户都可以预订几个日期,而且这些日期不必按任何顺序排列。这就是为什么我必须创建 BookDates 以避免 this 但现在我遇到了如何关联这两个表的问题,因为我不能只将复合键的部分与另一个表相关联。这就是 BookDates 表现在的样子。没有主键。

【问题讨论】:

  • “如何关联这两个表”。哪两张表? BookDates 将 BookDate 作为 BookingDate 的外键。
  • Booking中没有BookDate字段,所以不知道你在说什么。
  • 抱歉,我指的是 BookNum。 BookNum 是 Booking 的主键,引用自 BookDates。

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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,您是正确的,您的答案似乎也是正确的。但是我已经尝试过这样做,但我不知道该怎么做,因为它不允许我在外键 (BookNum) 旁边制作复合键 (Dates & BookNum)。
  • 你想在哪里实现它? (MySql、Sql server,还有别的吗?)你收到的错误是什么?您尝试运行的脚本是什么?
【解决方案2】:

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

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

  2. 添加一个新的 BookDatesId 作为主键,它可以是一个身份 列并将其设为 PK,它将是“代理键”。

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2017-03-25
    • 1970-01-01
    • 2012-09-22
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多