0

我正在开发一种连接2个数据源(例如查询)的方法。DB设计:同一列用于2个不同的外键

我有一个名为QUERYFIELD结构如下表:

QueryID 
FieldID 
FieldName 

....

如果我有QUERYFIELD

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

2个记录我希望有一个新的表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 

这将工作,但我觉得这是不具有相同领域的最佳DB设计作为另一张桌子上的两个不同列的外国人。任何人都可以提出更好的方法吗?

+1

更好的方法:有两个**分开的**列,每个列都是FK关系之一的FK。这样,你也可以**在数据库中执行** FK关系 –

+0

+1对于上面的评论 – Jerome

+0

我不确定我是否得到你,我已经在QueryFieldJoin表中有2个独立的列? – keitn

回答

0

的DB设计也要看是什么您的需求:

1)你需要哪些查询回答? 2)您需要多快才能访问这些数据?

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

对于实例,您可能会考虑有三个不同的表:一个用于字段,一个用于查询和一个操作。

如果您不想执行任何加入,那么甚至还有一张大桌子。

相关问题