mysql在两列上使用外键
我有以下表格: 表1mysql在两列上使用外键,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 |
| 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的产品,等等