【问题标题】:Could I same column to represent a foreign key to multiple tables?我可以用同一列来表示多个表的外键吗?
【发布时间】:2010-10-19 17:15:45
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    如果这出现在一对一的关系中,您可以考虑翻转这种关系。将外键移动到其他表。任意数量的表都可以将外键链接到单个原始表。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2020-10-02
            • 1970-01-01
            • 1970-01-01
            • 2020-07-24
            • 1970-01-01
            • 2013-09-11
            • 2013-04-23
            • 1970-01-01
            • 2021-07-06
            相关资源
            最近更新 更多