2009-08-25 2 views
3

Я просматриваю модель базы данных. Мне нужна помощь с частью модели. На этом этапе меня интересует только логическая модель, а не реализация. Я хочу принять наилучшую практику.Схема данных для сложных объектов - этот подход проще

Краткое описание проблемы

  • База данных используется приложение, которое управляет судебных дел в юридической фирме.

  • В каждом случае имеется несколько сторон. (По партийным вопросам я имею в виду какое-то юридическое лицо в реальном мире, у которого есть доля в деле.)

  • Существует около 40 различных типов сторон.

  • 2 из этих типов могут быть одним человеком, единой организацией или несколькими лицами и/или организациями, объединенными в любой комбинации.

  • Другие 38 типов могут быть как отдельным человеком, так и отдельной организацией.

  • Каждый случай всегда имеет две стороны сложных типов (то есть потенциально сочетание лиц и организаций).

  • Обычно на каждый случай приходится от 5 до 10 партий.

Опции

  1. Каждая сторона моделируется как потенциально combintation любого числа лиц и организаций. Таблицы будут выглядеть следующим образом:

    • Case < - CasePartyAssignment - > партия
      Где все стороны потенциально сочетание лиц и организаций:
    • партии <- PartyPersonAssignment -> Person
    • партия <- PartyOrgAssignment -> Организация
  2. В качестве альтернативы, я моделирую это с 3 различными типами таблиц CasePartyAssignment.

    Первый такой же, как 1 выше, которая охватывает сложный сценарий:

    • Case <- CaseComplexPartyAssignment -> ComplexParty

      В дополнение добавить специальные таблицы для простых сценариев:

    • Дело <- CasePersonAssignment -> Лицо

    • Case <- CaseOrgAssignment -> Организация

Как я понимаю, оба варианта имеют свои преимущества и недостатки. Например, в варианте 1 я создаю единственный способ хранения данных, который сам по себе является простым из-за согласованности. Но это означает, что я также моделирую ту вечеринку, которую я знаю, - это простой Человек, использующий PartyPersonAssignment, предназначенный для моделирования сложной вечеринки.

У кого-нибудь есть какие-либо соображения или мнения об этих параметрах?

ответ

1

Я думаю, что вариант 1 более гибкий. С помощью опции 1 вы сможете добавлять или удалять Лица или Организации из Стороны, добавляя или удаляя записи из таблиц «многие-ко-многим», тогда как с вариантом 2, если вы начинаете с простого одиночного Лица или единой Организации настройки, это немного более неуклюже, чтобы модифицировать его в ComplexParty. Думаю, я предпочитаю держать угловые случаи вне модели данных и пытаюсь использовать гибкую модель, которая может обрабатывать угловые случаи так же, как и более сложные случаи.

Я не думаю, что это слишком плохо, чтобы представлять отдельные сущности в качестве Стороны, даже если партия в этом случае не нужна.

+0

Спасибо за ваш вклад. Я продолжу вариант 1. – emeargnc

0

Я бы моделировать его немного по-разному:

  • Человек
  • Организация
  • PerOrg: супер-тип лица/организации, т.е. LegalEntity
  • партия: либо комплекс из сторон или в простая сторона
  • PerOrgPartyAssignment: отношения между PerOrg и Party, вы можете иметь одну или несколько PerOrgs на одну партию (но не менее одного)
  • случая: здесь у вас есть только PlantiffParty и DefendentParty

Концепция PerOrg (ака «Любая»/«юридическое лицо»/«Сторона» ...) довольно мощная концепция для любых моделей данных с участием коммерческих отношений , Я использовал его несколько раз, и это всегда упрощает модель данных, когда существуют, казалось бы, сложные отношения.

+0

В этой модели я не уверен в деталях супертипа PerOrg. Если вы имеете в виду, что PerOrgId будет необязательным FK в таблицах Person и Organization, это не сработает в нашей ситуации из-за нашей потребности в том, чтобы Личность или Организация могли присоединиться к более чем одному из этих супер-типов. Или вы имели в виду, что PerOrg имеет столбцы PerOrgId, PersonId, OrgId? Последний близок к варианту 1, но я не уверен, что лучше делать так. – emeargnc

+0

Нет, PerOrg это супертип.Супертип означает, что PerOrgID является PK, а не FK. См. Http://it.toolbox.com/blogs/enterprise-solutions/understanding-entities-in-er-diagrams-14255 для примеров подтипов и супертипов –