Проект базы данных: третья таблица, которая относится как к родительским, так и к дочерним таблицам - PullRequest
2 голосов
/ 06 декабря 2010

Я разрабатываю базу данных SQL Server 2005 для банка, в котором будут храниться записи, относящиеся к клиентам (родительская таблица) и их портфелям (дочерняя таблица), причем каждый клиент имеет несколько портфелей.Таблицы на данный момент:

Client (Client_Number PK ...)

Portfolio (Portfolio_ID PK, Client_Number FK ...)

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

Third_Party (Third_Party_ID PK, Third_Party_Name ...)
Relationship (Relationship_ID PK, Third_Party_ID FK, Client_Number FK ...)

Это будет работать нормально, но третьи стороны могут быть связаны с Портфелями (дочерней таблицей), а такжеКлиенты (родительская таблица).

Например, у Клиента 1 есть Портфель 1 и Портфель 2. Клиент 1 и Портфель 1 связаны с Организатором 1, а Портфель 2 связан с другим Организатором.

Любая идея относительно наилучшей практики для дизайна таблицы для вышеуказанной ситуации?

Заранее спасибо.

1 Ответ

2 голосов
/ 06 декабря 2010

Я бы выбрал две дополнительные таблицы:

Client_ThirdParty
Portfolio_ThirdParty

, которые будут действовать как сущности связи между двумя существующими таблицами и "ThirdParty".Я бы держался подальше от таблицы «Отношения», которая выглядит как скрытые метаданные.

РЕДАКТИРОВАТЬ

Например, у Клиента 1 есть Портфель 1 и Портфель 2Клиент 1 и Портфолио 1 связаны с Организатором 1, а Портфель 2 связан с другим Организатором.

Вы имеете в виду три дополнительные таблицы?ThirdParty, Client_Relationship и Portfolio_Relationship?Я спрашиваю об этом, так как отношения между Клиентом и Портфелем относятся к единому «пулу» Третьих сторон.

Хорошо, если есть другие отношения, которые необходимо рассмотреть, вам может потребоваться более сложная (но, как я не понимаю)Не знаю ваших данных, я могу что-то пропустить!):

  • У клиентов может быть много портфелей
  • У клиентов может быть много ThirdPartys
  • В портфелях может быть 1 клиент?
  • В портфелях может быть много ThirdPartys
  • В ThirdPartys может быть много клиентов
  • ThirdPartys может иметь несколько портфелей

Если это правильно, то:

Client  
Portfolio (contains ClientId to refer to its client)
ThirdParty

Client_ThirdParty  <-- link entity that handles the Client/ThirdParty M-to-M
Portfolio_ThirdParty  <-- link entity that handles the Portfolio/ThirdParty M-to-M
...