我可以用同一列来表示多个表的外键吗?

问题描述:

我想用同一列来表示有不同列的外键。这是因为可以使用此列索引任意数量的表。
现在,我的想法是使用一个小的varchar()字段来表示它们正在索引的字段,然后检查它们是否可能子查询与给定字段匹配的所有字段,然后根据id查询?
这是一个利用MySQL索引的好方法吗?
还有其他更好的方法来完成这个吗?我可以用同一列来表示多个表的外键吗?

我通常使用阿爸对这些排序在一个一对多的关系问题的解决方案。使用类型字段来定义外键所遭受的表。

如果这是一对一的关系,你可能会考虑翻转周围的关系。将外键移到其他表中。任何数量的表都可以将外键链接到单个原始表。

查看http://github.com/Theaxiom/Polymorphic2.0 Polymorhpic行为。

您使用2个字段来表示与任何其他表的连接。一个字段保存链接模型的ModelName,另一个字段保存任意的foreign_id值。

创建一个“超类型”表,该表将统一来自其他表的键。这个例子可能会有帮助:

http://consultingblogs.emc.com/davidportas/archive/2007/01/08/Distributed-Keys-and-Disjoint-Subtypes.aspx

表示gen-spec设计模式的一种方法是在专用表中使用与外键和主键相同的键。作为一个外键,它引用了广义表中的PK。而泛化表中的PK引用了一个专用表中的一行,而没有指定哪一个。

这是在关系模型中对gen-spec模式进行建模的常用方法。