Моделирование данных: всегда ли необходимо использовать таблицу пересечений? - PullRequest
11 голосов
/ 28 августа 2011

Рассмотрим следующее:

У меня есть две таблицы (Клиенты и случаи), определенные следующим образом:

**Customers**
CustomerId (PK)
CustomerName
CustomerPhone

**Cases**
CaseId (PK)
CaseManager
CaseNotes

Каждый клиент может иметь неограниченное количество случаев, однако каждый случай может толькопринадлежат одному клиенту.Поэтому, чтобы связать таблицы друг с другом, я бы использовал таблицу пересечений (CustomerCases), которая состоит из внешних ключей из каждой таблицы соответственно.

Однако я не мог просто добавить CustomerID изТаблица клиентов как внешний ключ к таблице дел?Я чувствую, что что-то упустил.Есть ли какие-либо подводные камни, о которых мне следует знать, если я решу не использовать таблицу пересечений?

Ответы [ 2 ]

7 голосов
/ 28 августа 2011

Если один случай может принадлежать только одному клиенту, мне кажется вполне разумным, что вы просто добавляете FK CustomerID в таблицу «Случаи».
Если вы считаете, что требование может в конечном итоге измениться (например, в случае может быть несколько клиентов)), тогда подход таблицы пересечений может иметь больше смысла.
Также, если у вас нет неопределенного количества CaseManagers, может также иметь смысл иметь таблицу Managers и иметь FK из таблицы Cases к этому.

6 голосов
/ 28 августа 2011

Таблица "пересечение" (иначе говоря, "соединение" или "перекрестная ссылка") необходима только для моделирования отношения "многие ко многим". В этой ситуации дело участвует в отношениях «много к одному» с клиентом. Итак, внешний ключ - это все, что требуется - и это действительно было бы более обычное решение. Избегайте ненужной сложности соединительной таблицы - если только нет архитектурной причины обратного (например, приложение полагается на компонент, который требует, чтобы все отношения были представлены с помощью соединений).

...