【问题标题】:DB Design: Same Column used for 2 different foreign keys数据库设计:同一列用于 2 个不同的外键
【发布时间】:2011-11-15 14:37:55
【问题描述】:

我正在开发一种连接 2 个数据源(例如查询)的方法。

我有一个名为 QueryField 的表,其结构如下:

QueryID
FieldID
FieldName

....

如果我在 QueryField 上有 2 条记录

     QueryID         FieldID            FieldNAme
     ------------    ---------          ----------
     1               1                  CustomerID
     1               2                  CustAddress
     2               3                  CustNo
     2               4                  CustomerPhone

我想要一个新表 QueryFieldJoin,它定义了 2 个查询中的哪些字段用于加入。我的想法是有以下结构

 LeftJoinFieldID (FK from FieldID of QueryField)
 RightJoinFieldID (also FK from FieldID of QueryField)
 JoinType (intersect, outer join).

PrimaryKey 是 LeftJoinFieldID 和 RightJoinFieldID 的组合

    LeftJoinFieldID           RightJoinFieldId             JoinType
    --------------            ----------------             --------
    1                         3                            Intersect

这会起作用,但是我觉得这不是最好的数据库设计,它具有与另一个表上两个不同列的外部字段相同的字段。有人可以提出更好的方法吗?

【问题讨论】:

  • 更好的方法:有两个 单独的 列,每个列都是 FK 关系之一的 FK。这样,您还可以强制数据库中的 FK 关系
  • 以上评论+1
  • 我不确定我明白了,我在 QueryFieldJoin 表中已经有 2 个单独的列?
  • 这个设计对我来说很好。在 ORDERS 表中看到它,其中 SHIP_TO 和 BILL_TO 字段都引用回 ADDRESS 表。

标签: sql database database-design foreign-keys foreign-key-relationship


【解决方案1】:

数据库设计还取决于您的需求:

1) 您需要回答哪些问题? 2) 您需要以多快的速度访问这些数据?

从富有表现力的 POV 来看,您的设计可能是正确的,但可能不是最佳解决方案,具体取决于您需要运行哪些查询。

例如,您可以考虑使用三个不同的表:一个用于字段,一个用于查询,一个用于操作。

如果您不想执行任何联接,甚至可以在一张大桌子上放所有东西。

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多