0

有人可以帮助我理解这一点,因为我不确定我是否应该在其中包含一个主键,因为它看起来不像我需要它。

我有两个表结构如下:

表 1:程序
program_id
cycle_unit

表 2:program_has_days


program_id

一个程序可能需要很多天才能完成,因此该程序有一个表 2 中的时间表。时间表列出了该程序可以完成的一周中的哪一天(例如第 1 周的第 1 天,然后是第 2 周的第 3 天) . 所以在这里,它具有一对多的关系。我想知道我应该将主键(id)放到表 2 中吗?

我认为我不需要主键,因为我不会直接参考时间表。我总是参考 program_id 来获取时间表。在这种情况下,program_id 不能是主键,因为它不是唯一的。

4

2 回答 2

0

如果您不打算在同一天/几周内运行许多程序,则无需在表 2 上进行 PK。

但是,如果您要在同一天/几周运行许多程序,那么您可能希望在表 2 上添加一个 PK,并在它们之间有第三个连接表。这样一来,您就不会在表 2 中针对同一天/周组合获得多行(即,没有必要为该特定天/周存在的每个程序保留一行)。尽管这会增加检查是否已经存在适当的日期/周的复杂性。

如果您有兴趣有效地搜索在特定日期/周运行的程序(但您说过您不是......),这种方法将特别相关。

另一种情况可能是,如果您需要一个程序在多个时间表上运行(例如,该程序将运行几个星期(正如您所概述的那样,每天都有不同的记录),但是该程序将再次在 6 中重新运行月在不同的日程安排日/周等。或者可能是 2 个不同但同时的日程安排?)。这将需要表 2 上的 PK 和连接表来跟踪单独的时间表或表 2 上的另一个键来区分记录属于特定日期/周/节目组合的时间表实例。

于 2012-08-18T07:44:48.963 回答
0

是的,好的做法;不,不需要。每个表都有一个主键是一种很好的做法。如果您决定确实需要引用表的数据,这将在以后为您提供帮助——即使只是删除几行而不必指定其他一些唯一的字段集。

于 2012-08-18T07:55:37.563 回答