Моделирование данных: Всегда ли необходимо использовать таблицу пересечений?

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

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

**Customers**
CustomerId (PK)
CustomerName
CustomerPhone

**Cases**
CaseId (PK)
CaseManager
CaseNotes

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

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

Ответ 1

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

Ответ 2

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