Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql是否可以根据其他表的值定义SET类型的外键?_Mysql - Fatal编程技术网

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

mysql是否可以根据其他表的值定义SET类型的外键?,mysql,Mysql,有表1和表2,目前表1中有一个外键: FOREIGN KEY (foreign_ref) REFERENCES `table2` (chars) ON UPDATE CASCADE, 是否可以设置类型为SET的外部_ref,并从表2.chars中设置可能的设置值?更好的是,在表2中插入新行时,使foreign_ref自动添加可能的值 更新: 实际上,我希望应用的场景是table1是一个item表,table2是一个tags表。但是表1中的1项可以有多个标记。表2不会包含很多行,但可能会

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

FOREIGN KEY (foreign_ref) REFERENCES `table2` (chars)
    ON UPDATE CASCADE,
是否可以设置类型为SET的外部_ref,并从表2.chars中设置可能的设置值?更好的是,在表2中插入新行时,使foreign_ref自动添加可能的值

更新:

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

简单地说,我希望表1中的一列可以有不同数量的标记,并对其进行约束,使其仅允许从固定的值集中进行选择

是否可以设置类型为SET的外部参考

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

从表2.chars中设置可能的值

不,不可能,集合的值列表在表头中定义,只能通过ALTERTABLE语句进行更改

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

否,外键无法将新值添加到设置的值列表中。同样,您需要使用alter表来更改值列表


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

您可能使用SET来避免主表和多对多表。如果你需要一个适当设计的特点,你需要一个适当的设计。如果更改设计为时过晚,恐怕您将不得不做大量复杂的额外工作。我更新了我的帖子,这是一个多对多的设计,但这是我能想到的最直接的设计。在单个数据库字段中存储多个值通常是一个坏主意。除了触发器之外,数据库世界中没有任何东西可以强制执行此类检查。如果你完全改变了你的问题,那么删除它并问一个新的问题会更有用。很好的解释!我想用某种面向mysql的方式将多个ID存储到一个字段中,但最终在文本字段中使用了ID列表。