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



我需要有迎宾经验的人的建议。

我的数据库中有一个关联实体,比如:

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列的组合作为唯一列?如果是这样,那么你应该选择第一个选项。

否则我会选择第二种选择。

使用第一个选项,如果DateI是日期数据类型,您将无法为客户插入两次相同的服务。如果是约会时间,那么这是可行的。

如果您想在任何其他表中使用这个主键(复合主键(作为外键,那么您也需要使用那里的所有三列。

我更喜欢PK是"自然";。您有3列,它们加在一起可以唯一地定义每一行。我会考虑使用它。

下一个问题是将这3列按什么顺序排列。这取决于常见的查询。请提供。

索引(包括PK(只在最左边先使用。为了有效地访问其他列,可能需要一些辅助密钥。再次,让我们看看查询。

如果你有很多二级索引,那么最好有一个代理AUTO_INCREMENT"id";作为PK。再次,让我们看看查询。

如果您曾经使用过日期范围,那么最好将DateSub放在任何索引的最后。(很少有例外。(

表中有几行?

表格是ENGINE=InnoDB,对吗?

提醒:PRIMARY KEY是一个Unique键,它是一个INDEX

DateSub的数据类型为DATE,对吗?

最新更新