【发布时间】:2021-07-04 03:32:24
【问题描述】:
我需要有迎宾经验的人的建议。
我的数据库中有一个关联实体,如下所示:
Table2-> CustomerID, ServiceID, DateSub
由于同一个客户(有 PK,例如 1111)可以多次但不能在同一日期要求相同的服务(有 PK,例如 3),因此表的复合 PK 2 不能只是 (CustomerID, ServiceID)。
现在我有两个选择:
1- "DateSub" 也是主键,所以表 2 的 PK 将是 (CustomerID, ServiceID, DateSub)
2- 为关联实体创建一个特定的 PK(例如,Table2ID,因此 CustomerID 和 Service ID 将为 FK)
您会采用这两种方法中的哪一种,为什么?谢谢
【问题讨论】:
-
第二个选项总是更好!。因为日期不应该是主键。大量客户在同一天提供相同的服务。因此,您需要为您的表指定一个特定的 PK,例如上面提到的第二个选项
Table2_id或只是Id并选中自动增量 -
也许我会关注第一个
-
主键是唯一键,因此您的第二个选项将只允许每个客户 1 个,而不管服务如何......您是否预计每个客户每天只有一个服务请求。
-
我认为合成主键是最好的选择——如果需要的话。如果需要,
(CustomerID, ServiceID, DateI)表达式的唯一性可以通过额外的 UNIQUE 索引来控制(但我怀疑它是否有用)。 -
附言。如果您仍然使用复合 PK,那么请仔细考虑索引表达式中最有用的列顺序(它必须改进对该表的大部分查询)。不要忘记 PK 是聚集索引。
标签: mysql sql database database-design mysql-workbench