MySQL多对一关系 - 是否需要主键?

时间:2012-08-18 07:39:16

标签: mysql

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

我有两个表结构如下:

  

表1:计划
  program_id
  cycle_unit

     

表2:program_has_days
  天
  周
  program_id

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

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

2 个答案:

答案 0 :(得分:0)

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

但是,如果您要在同一天/周内运行许多程序,那么您可能希望在表2中添加PK,并在它们之间建立第三个连接表。这样,对于相同的日/周组合,您将不会在表2中得到多行(即,对于该特定日/周存在的每个程序,没有一点保持一行)。虽然这会增加检查是否已存在适当的日/周的复杂性。

如果您有兴趣有效地搜索特定日/周运行的程序(但您已经说过不是......),那么这种方法尤为重要。

另一种情况可能是你需要一个程序在多个时间表上运行(例如,程序将运行几周(每天都有不同的记录),但是程序将重新开始按照不同的日程安排在6个月内运行日/周等。或者也许是2个不同的,但并发的时间表?)。这将要求表2上的PK具有连接表以跟踪单独的时间表或表2上的另一个键以区分时间表的哪一个实例与记录所属的特定日/周/程序组合。

答案 1 :(得分:0)

是的,良好做法;不,不是必需的。每个表都有一个主键是一个好习惯。如果你决定实际需要引用表的数据,这将在以后帮助你 - 即使它只是删除几行而不必指定一些其他唯一的一组它的领域。