Дизайн БД: одна и та же колонка используется для двух разных внешних ключей - PullRequest
0 голосов
/ 15 ноября 2011

Я разрабатываю метод объединения двух источников данных (например, запросов).

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

QueryID
FieldID
FieldName

....

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

     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

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

1 Ответ

0 голосов
/ 02 января 2012

Дизайн БД также зависит от ваших потребностей:

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

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

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

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

...