0

Я разрабатываю метод объединения двух источников данных (например, запросов).DB Design: тот же столбец, используемый для 2 разных внешних ключей

У меня есть таблица с именем QueryField со следующей структурой:

QueryID 
FieldID 
FieldName 

....

Если у меня есть 2 записей на QueryField

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

Я хочу, чтобы новый table 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 

Это будет работать, но я чувствую, что это не самый лучший дизайн БД, имеющий такое же поле как чужой для двух разных столбцов на другом столе. Может ли кто-нибудь предложить лучший подход?

+1

Лучший подход: имеют две ** отдельные колонки, каждая из которых является FK для одного из отношений FK. Таким образом, вы также можете ** принудительно использовать ** отношения FK в базе данных –

+0

+1 для приведенного выше комментария – Jerome

+0

Я не уверен, что я вас понимаю, у меня уже есть 2 отдельных столбца в таблице QueryFieldJoin? – keitn

ответ

0

БД Design также зависит от того, каковы ваши потребности:

1) Какие запросы вы должны ответить? 2) Насколько быстро вам нужно получить доступ к этим данным?

Из экспрессивного POV ваш дизайн может быть правильным, но, возможно, не лучшим решением, в зависимости от того, какие запросы нужно запускать.

Для экземпляра вы можете рассмотреть три таблицы: одну для полей, одну для запросов и одну операцию.

Или даже один большой стол со всем, если вы не хотите выполнять какие-либо соединения.