多对多(m:n)关系中的主键重复

问题描述 投票:0回答:2

[两个表tArticletCustomer之间存在m:n关系。每当客户购买商品时,商品和客户之间的链接就会存储在第三个表中,并带有一个附加属性,其中包含该客户购买的金额。

tArticle:

kArticle | title | stock
------------------------
1        | Water | 39
2        | Apple | 14

tCustomer:

kCustomer | surname | firstName
-------------------------------
1         | Muller  | Max
2         | Meier   | Tom

tCustomer_tArticle:

kCustomer | kArticle | number
-------------------------------
1         | 2        | 2
2         | 2        | 5
2         | 2        | 3

我知道,强烈建议您使用组合的外键作为主键。但是由于同一位顾客可以两次购买同一件商品,因此不再是唯一的了。

现在我的问题是我需要在第三张表中添加AUTO_INCREMENT主键,还是应该使用物理顺序来拥有唯一记录。

我的第二个问题是,是否有一种方法可以在实体关系图中指定m:n关系中的链接是否可能出现两次。

sql database relational-database entity-relationship entity-relationship-model
2个回答
0
投票

“现在我的问题是我需要在第三个表中添加一个AUTO_INCREMENT主键,还是应该使用物理顺序来拥有唯一记录。”


0
投票

我不知道在哪里“强烈推荐”两个外键作为主键。那绝对是一种方法。我倾向于始终为表分配唯一的自动递增键的方法,除非开销太大。

实质上,您的表是一个事务表。我不仅建议自动增加密钥,还建议交易日期/时间以及其他信息。

至此评论:

或者我应该使用实际订单获得唯一记录。

SQL表表示无序集。您没有看到物理顺序对访问行很有用。如果您关心插入顺序,那么您确实需要一个自动递增的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.