小编典典

多对多关系 bridge table dilemma

sql

salesman
========
uId

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

group
======
groupId

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

我得到了这个味精:

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

描述salesGroupLinked


阅读 180

收藏
2021-04-07

共1个答案

小编典典

该工具只是告诉您,一个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;

This would update three records instead of one.

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,并将其作为主键。
2021-04-07