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

时间:2010-10-19 17:15:46

标签: mysql database-design cakephp has-and-belongs-to-many

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

创建一个“超类型”表,用于统一其他表中的键。这个例子可能会有所帮助:

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

答案 2 :(得分:0)

我通常在一对多的关系中使用Abba的解决方案解决这些问题。使用类型字段定义外键引用的表。

如果这是一对一的关系,你可以考虑改变这种关系。将外键移动到其他表。任意数量的表都可以将外键链接到单个原始表。

答案 3 :(得分:0)

表示gen-spec设计模式的一种方法是使用相同的密钥作为外键和专用表中的主键。作为外键,它引用了通用表中的PK。并且通用表中的PK引用了一个专用表中的一行,而没有指定哪一个。

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