Mysql有几列用于多态关系 - 可行吗?

时间:2016-06-10 12:39:02

标签: mysql foreign-keys polymorphic-associations

我有几个'模块'(目前为4个),每个模块都有自己的表。

我想为所有这些模块实现标签系统。标签将分别在每个模块之间具有多对多的关系。

为了实现这种多态关系,我考虑创建一个像这样的数据透视表:

tag_name | module_1_id | module_2_id | module_3_id | module_4_id ......等等。

此tag_module数据透视表的任何行都有一个有效的fk到一个module_id,其余的将设置为null。

我的问题是,这是一种非常危险的方式来实现这个实现吗?有没有比这更好的方法来得到我想要的东西?

如何确保带有module_N_id的tag_name的唯一性,这意味着特定模块中的特定项目应该只为其分配一次特定标记?

此外,随着时间的推移,模​​块的数量将会增加,因此在未来,列数可能会达到10,20甚至50。这种实现是否会阻止这种增长?

1 个答案:

答案 0 :(得分:1)

只需创建一个包含模块ID和标记名称字段的表,并在这两列上创建一个多列唯一索引(您可以向表中添加任何其他字段)。多列唯一索引允许您将相同的标记名称与多个模块相关联,但会阻止您多次为同一模块分配相同的标记名称。