mysql 是否可以根据其他表值定义 SET 类型外键?



有表1和表2,目前表1中有一个外键:

FOREIGN KEY (foreign_ref) REFERENCES `table2` (chars)
ON UPDATE CASCADE,

是否可以制作 SET 类型的foreign_ref,并从 table2.chars 中制作可能的设置值?甚至更好的是,在将新行插入 table2 时foreign_ref自动添加可能的值?

更新:

实际上,我希望应用的场景是table1是一个项目表,table2是一个标签表。 但是表 1 中的 1 个项目可以有多个标签。 table2 不会包含很多行,但可能会经常修改,我可能需要添加更多标签才能附加到未来的项目。 将行添加到 table2 意味着新标记可供将来的项目使用。不修改现有的。

简单来说,我希望 table1 中的一列可以具有不同数量的标签,并对其进行约束以仅允许它从固定的值集中进行选择。

是否可以制作 SET 类型的foreign_ref

是的,从技术上讲这是可能的,但这样做没有真正的意义。有关原因,请参阅以下几点。

从 table2.chars 中生成可能的设置值

不,不可能,set的值列表在表头中定义,只能通过alter table语句进行更改。

使foreign_ref在表2中插入新行时自动添加可能的值

不可以,外键不能向set值列表中添加新值。同样,您需要使用alter table来更改值列表。

总体:如果字段可能具有的值列表相对较小,并且该列表不太可能更改,因此最好使用set数据类型,因为您可以避免添加另一个查找表和外键。一个很好的例子可能是基本方向(北、西等):你有 4 个,并且该列表不会改变。如果需要动态编辑字段可能具有的值列表,则最好使用查找表和外键。

最新更新