有table1和table2,目前table1中有一个外键:
FOREIGN KEY (foreign_ref) REFERENCES `table2` (chars)
ON UPDATE CASCADE,
是否可以设置SET类型的foreign_ref,并从table2.chars中设置可能的设置值?甚至更好的是,在将新行插入table2时使foreign_ref自动添加可能的值?
更新
实际上,我希望应用的场景是table1是一个item表,table2是一个tags表。但是table1中的1个项目可以有多个标签。 table2不会包含很多行,但可能经常修改,我可能需要添加更多标记,以便附加到将来的项目中。向table2添加行意味着可以使用新标记以供将来使用。不修改现有的。
很简单,我希望table1中的列可以包含不同数量的标记,并对其进行约束以仅允许它从固定的值集中进行选择。
答案 0 :(得分:0)
是否可以使用SET
类型的foreign_ref
是的,从技术上来说这是可能的,但这样做没有实际意义。请参阅以下几点了解原因。
从table2.chars
中获取可能的设置值
不,不可能,set
的值列表在表头中定义,只能通过alter table
语句进行更改。
在将新行插入table2
时,使foreign_ref自动添加可能的值
不,外键无法向set
值列表添加新值。同样,您需要使用alter table
来更改值列表。
总体来说:如果某个字段可能包含相对较小的值列表且该列表不太可能更改,则最好使用set
数据类型,因为您可以避免添加另一个查找表和外键。一个很好的例子可能是基本方向(北,西等):你有4个,而且这个列表不会改变。如果您需要动态编辑字段可能具有的值列表,那么最好使用查找表和外键。