2016-06-10 26 views
0

我有几个'模块'(目前4个),每个模块都有自己的表格。Mysql多列关系的几列 - 可行吗?

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

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

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

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

我的问题是,这是一个非常危险的方式去实施这个?有没有比这更好的方法来获得我想要的?

如何确保tag_name与module_N_id的唯一性,意味着来自特定模块的特定项目应该只为其指定一个特定标签?

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

回答

1

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

+0

好吧,所以tag_id + module_1_id + module_2_id ..... module_N_id都将是唯一的吗? 除此之外,使用这种设计有什么问题吗? –

+0

我真的不明白你的问题。 – Shadow

+0

我的意思是问这个设计是否有任何严重的性能问题或问题? 会将列数增加到30,从而减慢性能? –