多对多关系桥表困境

时间:2014-04-27 07:32:42

标签: mysql sql database phpmyadmin

salesman
========
uId

salesGroupLinked
================
uId
groupId
//add performacesScore field here

group
======
groupId

我上面有3个表,形成了多对多关系,我会添加一个字段'performaces'(INT),这样每个销售人员都可以在每个组中得分。我相信它应该位于salesGroupLinked表。但由于uId和groupId是FK,我无法插入/编辑数据(我使用的是phpmyadmin)。我不能使performacesScore字段唯一,因为它们可以是相同的值,例如,销售员获得10而另一个获得相同。

我收到了这个消息:

  

此表不包含唯一列。网格编辑,复选框,   编辑,复制和删除功能不可用。

描述salesGroupLinked enter image description here

1 个答案:

答案 0 :(得分:0)

该工具只是告诉您uId-groupId组合可以有多个条目。例如:

uId  groupId  performacesScore 
1    1        10
1    2        20
2    1        30
2    1        30
2    1        40
2    2        20

现在想象一下这个数据会显示给你,并且你将第一个2/1/30打成2/1/50。该工具可以向dbms发送什么更新语句?

update salesGroupLinked set performacesScore = 50
where uId = 2 and groupId = 1;

这将更新三个记录而不是一个。

update salesGroupLinked set performacesScore = 50
where uId = 2 and groupId = 1 and performacesScore = 30;

这仍然会更新两个记录而不是一个。

因此,为了正确更新和删除,您必须告诉dbms使记录唯一的原因。有四种可能性:

  • 如果您不想更新或删除单个记录,请保持原样。
  • 如果您希望能够更新并且uId-groupId组合只能有一个条目,那么告诉dbms,并使uId和groupId成为表的主键。
  • 如果您希望能够更新并且uId-groupId组合可能存在重复项,但uId-groupId-performacesScore组合将始终是唯一的,那么将这三个组合作为表的主键。
  • 如果您希望能够更新并且任何组合都可以重复,那么请为表格提供另一列技术ID,并将其作为主键。