我需要有迎宾经验的人的建议。
我的数据库中有一个关联实体,比如:
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
列的组合作为唯一列?如果是这样,那么你应该选择第一个选项。
否则我会选择第二种选择。
使用第一个选项,如果DateI是日期数据类型,您将无法为客户插入两次相同的服务。如果是约会时间,那么这是可行的。
如果您想在任何其他表中使用这个主键(复合主键(作为外键,那么您也需要使用那里的所有三列。
我更喜欢PK是"自然";。您有3列,它们加在一起可以唯一地定义每一行。我会考虑使用它。
下一个问题是将这3列按什么顺序排列。这取决于常见的查询。请提供。
索引(包括PK(只在最左边先使用。为了有效地访问其他列,可能需要一些辅助密钥。再次,让我们看看查询。
如果你有很多二级索引,那么最好有一个代理AUTO_INCREMENT
"id";作为PK。再次,让我们看看查询。
如果您曾经使用过日期范围,那么最好将DateSub
放在任何索引的最后。(很少有例外。(
表中有几行?
表格是ENGINE=InnoDB
,对吗?
提醒:PRIMARY KEY
是一个Unique键,它是一个INDEX
。
DateSub
的数据类型为DATE
,对吗?