[英]Composite primary keys vs auto increment primary key in sql workbench
我需要有迎宾经验的人的建议。
我的数据库中有一个关联实体,如下所示:
Table2-> CustomerID, ServiceID, DateSub
由于同一个客户(有 PK,例如 1111)可以多次要求相同的服务(有 PK,例如 3)但不会在同一个日期,所以表 2 的复合 PK 不能只是 (CustomerID, ServiceID )。
现在我有两个选择:
1- "DateSub" 也是主键,所以表 2 的 PK 将是 (CustomerID, ServiceID, DateSub)
2- 为关联实体创建一个特定的 PK (例如,Table2ID,因此 CustomerID 和 Service ID 将是 FK)
你会遵循这两种方法中的哪一种,为什么? 谢谢
首先,您需要确定是否需要将CustomerID
、 ServiceID
和DateI
列的组合设为唯一? 如果是这样,那么您应该使用 go 作为首选。
否则我会选择 go 作为第二个选项。
如果 DateI 是日期数据类型,则使用第一个选项,您将无法为客户插入相同的服务两次。 如果是日期时间,那么它是可行的。
如果你想在任何其他表中使用这个主键(复合主键)作为外键,那么你也需要在那里使用所有三列。
我倾向于更喜欢PK是“自然的”。 您有 3 列,它们一起可以唯一地定义每一行。 我会考虑使用它。
下一个问题是放置 3 列的顺序。这取决于常见的查询。 请提供它们。
索引(包括 PK)仅在最左边使用。 可能需要一些辅助键,以便有效地访问其他列。 再次,让我们看看查询。
如果你有很多二级索引,最好有一个代理, AUTO_INCREMENT
“id”作为PK。 再次,让我们看看查询。
如果您曾经使用过日期范围,那么最好将DateSub
放在任何索引的最后。 (有极少数例外。)
表中有多少行?
该表是ENGINE=InnoDB
,对吗?
提醒: PRIMARY KEY
是唯一键,它是一个INDEX
。
DateSub
是数据类型DATE
,对吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.