mysql在两列上使用外键

mysql在两列上使用外键,mysql,foreign-keys,Mysql,Foreign Keys,我有以下表格: 表1 | id | nr | name | ... 表2 | id | nr | prod | ... | id | nr | prod | ... 1 301 1001 2 301 1005 3 301 2098 4 305 1005 5 305 2099 表3 | id | nr | prod | act | data | publ | ... | id | nr | prod | act | data |

我有以下表格:

表1

| id | nr | name | ...
表2

| id | nr | prod | ...
| id | nr | prod | ...
  1   301   1001
  2   301   1005
  3   301   2098
  4   305   1005
  5   305   2099
表3

| id | nr | prod | act | data | publ | ...
| id | nr | prod | act | data | publ | ...
  1   301   1005   1     ...    ...    ...
  2   301   1001   NULL  ...    ...    ...
  3   305   2099   1     ...    ...    ...
  4   305   2098   1     ...    ...    ...
刺激

问题在表2和表3之间

如果我有

表2

| id | nr | prod | ...
| id | nr | prod | ...
  1   301   1001
  2   301   1005
  3   301   2098
  4   305   1005
  5   305   2099
表3

| id | nr | prod | act | data | publ | ...
| id | nr | prod | act | data | publ | ...
  1   301   1005   1     ...    ...    ...
  2   301   1001   NULL  ...    ...    ...
  3   305   2099   1     ...    ...    ...
  4   305   2098   1     ...    ...    ...
现在假设我想从表2中删除id=4的内容

Mysql返回错误,因为TABLE2.prod和TABLE3.prod之间存在外键

但事实上,我没有涉及nr=301的对象的数据,它在表3中也有一个条目301 1005

我怎样才能解决这个问题?可以在两列之间添加外键吗

我想防止从表2中删除表3中存在的数据,但是比较列nr和prod,不仅是nr或prod,到目前为止,我遇到了prod的问题


谢谢大家!

为什么T3的外键应该指向T2?它应该指向Prod


T3中的ID 1指向1005,它指向T2中您试图删除的条目。这违反了您在尝试删除T2条目时设置的外键。

T2定义了哪个产品具有此nr。T1定义nr的全球特征,T3定义价格。因此,如果我直接将T3.prod指向prod,我对nr.products没有控制权,因为在T3中有许多行具有相同的产品和不同的价格,但只有一行处于活动状态。标识符应该只有一个黄金来源。看起来T1应该是nr的首选项,Prod应该是Prod的首选项。您可能需要重新检查外键是否满足您的要求。除T1、2、3外,Prod还用于其他表中。T1是第1行的主表。T2具有T1的nr的产品。每个nr有多个产品。每个产品都有价格,T3有每个nr的每个产品的价格以及历史档案。事实上,《列法案》定义了当前有效的价格。我怎样才能重新定义呢?那听起来我原来的建议是正确的。T3应为Prod引用Prod,为nr引用T1。只要Prod和T1中存在的每个条目的Prod和nr值有效,那么您的数据完整性将得到维护。我如何控制每个nr的哪些Prod处于活动状态?对于每个nr,它们并不相同,cms上的用户应该能够激活和停用nr的产品,等等