繁体   English   中英

sql 工作台中的复合主键与自动递增主键

[英]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)

你会遵循这两种方法中的哪一种,为什么? 谢谢

首先,您需要确定是否需要将CustomerIDServiceIDDateI列的组合设为唯一? 如果是这样,那么您应该使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM