数据库设计:同一列用于 2 个不同的外键
Posted
技术标签:
【中文标题】数据库设计:同一列用于 2 个不同的外键【英文标题】:DB Design: Same Column used for 2 different foreign keys 【发布时间】: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 表。 【参考方案1】:数据库设计还取决于您的需求:
1) 您需要回答哪些问题? 2) 您需要以多快的速度访问这些数据?
从富有表现力的 POV 来看,您的设计可能是正确的,但可能不是最佳解决方案,具体取决于您需要运行哪些查询。
例如,您可以考虑使用三个不同的表:一个用于字段,一个用于查询,一个用于操作。
如果您不想执行任何联接,甚至可以在一张大桌子上放所有东西。
【讨论】:
以上是关于数据库设计:同一列用于 2 个不同的外键的主要内容,如果未能解决你的问题,请参考以下文章