我有两个表,一个是另一个表可以拥有的参数表,它们的存储方式如下:
表1
id name
1 var1
2 var2
3 var3
表2
id name parameters
1 name1 var1|var3
2 name2 var2
3 name3 var1|var2|var3
现在,当我运行DELETE查询时,我想更新表2参数,所以假设我在表1第1行运行DELETE查询,我想得到下表2的结果,我应该查询它:
表2
id name parameters
1 name1 var3
2 name2 var2
3 name3 var2|var3
任何帮助将不胜感激,谢谢
答案 0 :(得分:1)
你应该重组你的表格。规范化数据建模将告诉您使用n到m表结构(many-to-many或junction)。因此,创建一个第三个表,它包含对两个表的所有引用,并驻留在当前两个表之间。
答案 1 :(得分:0)
如果您尚未巩固此代码,我强烈建议您在架构变得难以管理之前重新构建架构。
在Table 2
中处理这种情况的正确方法不是划分Table 1
的关键值,而是按id
存储多行。然后,当从Table 1
删除时,FOREIGN KEY
约束可以强制执行ON DELETE CASCADE
,这将成为无问题。
示例表2数据如下所示:
id name
1 name1
1 name1
2 name2
3 name3
3 name3
3 name3
Table 2
的定义如下:
CREATE TABLE Table_2
(
id INTEGER NOT NULL,
name VARCHAR() NOT NULL,
FOREIGN KEY fk_id (id) REFERENCES Table_1 (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
答案 2 :(得分:0)
imho你这里有一个小的数据库设计问题。您必须通过执行以下操作来规范化表2:
id pk 英国名字 参数UK
参数应该有1个值。所以你的第3行应该分成两行:
3 name3 var2
4 name3 var3
或者如果它太复杂了,请像cularis说的那样,添加第三张表。