Замечательно, что вы нашли время, чтобы понять, классифицировать и смоделировать данные, с которыми вы работаете, поскольку, исходя из моего личного опыта, все это делает весь процесс разработки более простым и очень гибким для будущих изменений. И я совершенно уверен, что вы тоже об этом уже знаете.
Предварительная модель данных и предполагаемые бизнес-правила
Я определил список бизнес-правил, которые я принял после прочтения вашего вопроса и тщательного изучения ваших диаграмм, чтобы описать мое недопонимание ваших спецификаций. После определения такого списка я получил модель данных IDEF1X [1], которую я решил загрузить в виде документа .PDF на внешнюю платформу (Dropbox), поскольку из-за своего формата эта модель данных плохо вписывается во встроенное изображение. Эти два инструмента будут полезны в качестве ссылок на некоторые важные моменты, которые я перечислю ниже в разделе, озаглавленном Аспекты, которые необходимо решить, чтобы продолжать двигаться вперед .
Во-первых, вот ...
Поскольку только это, предварительно, рассмотрите это как средство, помогающее нам создать желаемую конечную модель данных.
Предполагаемые бизнес-правила
Упомянутая предварительная модель данных была получена из набора бизнес-правил (выведенных из вашего вопроса), которые я перечислю следующим образом:
Организации и профили
Обратите внимание, что Profile
в настоящее время понимается как синоним для Person
.
- Ан
Organization
друг один ко многим Profiles
.
- Ан
Organization
друг один ко многим Organizations
.
- Ан
Organization
является членом один ко многим Organizations
.
- А
Profile
является членом одного ко многимOrganizations
.
- А
Profile
друг один ко многим Profiles
.
- А
Profile
является членом одного ко многим Profiles
.
Расположение и адреса
- А
Organization
владеет один ко многим Locations
.
- А
Location
классифицируется как один ко многим LocationTypes
( только один в данный момент времени).
Location
Может иметь один-ко-многим Addresses
( один Physical
, один за Shipping
, один за Billing
, или один , который служит все указанные цели, или один , который сочетает в себе две цели и другой , который служит только один из них).
Address
Может храниться один-ко-многим Profiles
, или, иначе говоря, Profile
держит один-ко-многим Addresses
.
Конкретный Address
может быть использован один-ко-многим Profiles
(служит Physical
для одного Profile
, используется для Billing
на другой один , и т.д.). Таким образом, Address
работает аналогичным образом для Locations
и Profiles
.
- Таким образом, индивидуум
Address
может быть одновременно и типа Physical
, Shipping
и Billing
.
Расположение и роли
- А
Location
открывает один ко многим Roles
.
- А
Role
может быть выполнено в один ко многим Locations
.
- A
Profile
(как только он был установлен как Member
a Organization
) может выполнять один ко многим Roles
, один ко многим Locations
(но только по одному конкретному Role
в каждом из них Location
в определенный момент времени, т. Е. Никогда не два или более Roles
одновременно ).
Аспекты, чтобы решить, чтобы продолжать двигаться вперед
Чтобы продолжать продвижение в разрешении вашей модели данных, вот список важных моментов, которые, как только мы их разработаем, помогут нам достичь этой цели:
Я предположил, что термин Profile
в вашем контексте имеет такое же (или то же самое) значение, что и термин Person
, но он может быть немного другим. Таким образом, вы бы сказали, что в вашем сценарии сущности Organization
и Person
подтипы Profile
?
Может ли Profile
(или Person
) самостоятельно один-ко-многим EmailAddresses
, или является Profile
(или Person
) крепится к ровно один EmailAddress
?
Вы хотели бы , чтобы предоставить возможность для Organization
для контакта с помощью Telephone
и Email
, или вы хотите ограничить , что возможно только для Profile
(или Person
)?
Я предполагаю, что a Location
является точным к одному Address
из типов Physical
, это правильно?
Возможно ли для Location
для совместного использования одного ко многим отличается Organizations
или , в противном случае Location
может принадлежать только один Organization
?
Вы заявили в комментариях, что факт существования a Member
и a Friend
- это одно и то же. Как вы можете видеть в моей предложенной предварительной модели данных, я следовал за вами оригинальными спецификациями и изобразил все возможные комбинации членства и дружбы между Organization
и Profile
(или Person
) в разных организациях, поскольку я думаю, что это может быть полезным в определении наилучших возможных структура для этой части вашего сценария. В этом смысле:
- Я предполагаю, что утверждение
an Organization is a Member of another Organization
имеет иные эффекты, чем утверждение в a Profile (or Person) is a Member of an Organization
отношении вызываемой сущности Location
.
- Как вы можете видеть в модели данных, я думаю , что
Role
из Owner
действительна только для Organization
и, мне, действительный Roles
для Profile
(или Person
) Внутри Location
есть Admin
и Member
. Что вы думаете обо всем этом? Поскольку вы находитесь в прямом контакте с бизнес-правилами, применимыми к вашей ситуации, вы должны сообщить мне, верны ли мои предположения.
Может ли Profile
(или Person
) играть по-разному Roles
внутри одного и того же Location
? то есть, может ли Person
быть, в то же время, Admin
а также Member
одного и того же Location
? Каковы правила в этом отношении?
Я думаю, что одно и то же Profile
(или Person
) может играть по-разному Roles
в разных Locations
. Например: конкретный Profile
(или Person
) - это «Администратор» в Location
«1», и этот же Profile
(или Person
) - это « Member
» в Location
«2», в то же время. Я прав?
Возможно ли, Location
чтобы конкретное LocationTypes
лицо отличалось в одно и то же время, или индивидууму Location
назначено удерживать ровно одно LocationType
?
Organization.Website
Представляет ли атрибут адрес веб-сайта конкретной организации, например, «dba.stackexchange.com»?
Если Profile
«1» (понимается Person
) является Member
(или Friend
) от Profile
«2», это возможно для Profile
«1» , чтобы провести Role
в Location
принадлежащей Profile
«2»? Я считаю, что такие сценарии действительны только для отношений между Organization
и, Member
Person
так что вы думаете?
Аналогичным образом, если Organization
«1» является Member
(или Friend
) из Organization
«2», это возможно для Organization
«1» осуществлять Role
в Location
принадлежащей Organization
«2»? Опять же, я думаю, что такого рода сценарии действительны только для отношений между a Organization
и a Member
Person
, верно ли это?
В связи с этим -когда я пишу эту вопросы- я думаю , что было бы разумно сказать , что есть только три различные виды отношений с участием Organizations
и Persons
, и мы можем определить:
- (а) Отношения между
Organization
и Person
как « Membership
».
- (б) Отношения между а
Person
и другим отличаются Person
как « Friendhip
».
- (c) Нам еще предстоит найти осмысленное имя, чтобы описать отношения между человеком
Organization
и другим человеком Organization
.
- Итак, дайте мне знать, что вы думаете о (а), (б) и (в).
Возможно ли одновременно Organization
быть Friend
(или а Member
) из одного ко многим разным Organizations
? Или это возможно Organization
только иметь отношения только с одним другимOrganization?
Последовательная модель данных, изображающая первое продвижение
Обращаясь к вашим ответам и решениям в отношении ожидающих рассмотрения аспектов, которые я перечислил выше, я создал следующее ...
Хотя мне пока не очень комфортно с этим, новая модель данных выражает следующие бизнес-правила:
Profile
Является либо Organization
илиPerson
. [2]
- A
Profile
может быть другом одного ко многим FriendProfiles
, а a Profile
может быть другом одного ко многим FriendProfiles
. [3]
- А
Location
может состоять из одного ко многим Locations
. [4]
Ответы на ваши последующие конкретные комментарии
Мне действительно интересно отметить / усугубить разделение интересов [например, LocationAddress и ProfileAddress] - поскольку я, очевидно, хотел ворваться и удержать их всех без правильных отношений [как ни странно, это было не так с моей первоначальной ERD].
Да, это хорошее сравнение, хотя я бы не назвал это разделением интересов (что, безусловно, является фундаментальным принципом в разработке и разработке приложений), поскольку этот термин обычно относится к стадии разработки приложений, и в настоящее время мы находимся в этап понимания данных и проектирования его логической структуры.
Исходя из моего личного опыта, я считаю, что эта фаза связана с тем, чтобы поместить важные вещи во весь их контекст, она связана с наблюдением ассоциаций, существующих между различными объектами, которые имеют отношение к конкретному сценарию интереса, а затем изображая эти вещи в модели данных. В конкретном случае, о котором вы комментируете, Address
сущность может иметь различные виды связей с другими сущностями, одна с, Profile
а другая с Location
.
И, да, когда что-то не кажется правильным или естественным , это может быть признаком того, что нужно приложить больше усилий, чтобы понять соответствующие данные. Таким образом, Address
сущность - это одна из тех вещей, которые, на мой взгляд, нуждаются в большем внимании, поскольку я считаю, что отношения между a Profile
и a Address
можно обрабатывать посредством Location
сущности (поскольку каждый Location
должен иметь хотя бы одну физическую Address
), поэтому мы могли бы уволить ProfileAddress
ассоциативную сущность , изображенную в последней модели, но вы должны продолжать эти пункты анализируя и дайте мне знать ваши идеи.
Кроме того, является ли распространенной практикой в IDEF1X изменение обозначений PK / FK в сущностях для лучшей читаемости [например, ProfileId - LocationOwnerProfileId]?
Да, это очень умное замечание с вашей стороны, поскольку IDEF1X рекомендует использовать имена ролей для обозначения FOREIGN KEYS, чтобы уловить значение таких атрибутов в соответствии с сущностью, в которой они используются. Стоит также отметить, что это также тесно связано с концепцией миграции первичных ключей . Фактически, использование имен ролей предшествует IDEF1X, так как оно было первоначально представлено доктором Э. Ф. Коддом в его оригинальном тексте 1970 года. Таким образом, можно четко увидеть, насколько стандарт IDEF1X соответствует реляционной модели .
Я был бы заинтригован, чтобы узнать, что вам не особенно нравится / чувствует, что это не моделирует, с / в решении?
Помимо подробностей, уже описанных выше об Address
объекте, я не уверен , эквивалентны ли Roles
выполняемые данным Profile
в конкретном или . С моей точки зрения, сначала нужно связать с , а затем это назначило бы сказанное для выполнения в конкретном , но вы лучше знаете сценарий, поэтому эти правила могут быть ненужными. В связи с этим, я буду настаивать на том , о том , что было бы очень полезно для меня , чтобы знать контекстное описание или значение , что пользователи в будущем этой структуру данных Отдать , иLocation
Organization
Person
Person
Organization
Organization
Person
Role
Location
Organization
Profile
Location
, но я понимаю, что это может считаться конфиденциальной информацией, поэтому это будет ограничением.
С текущей структурой кажется, что каждый ( Organization
или Person
) может быть связан с кем-либо (снова Organization
или Person
) и может / делать что угодно ( Role
) где угодно ( Location
), но, вероятно, это именно то, что вы и пользователи ожидаете от этой базы данных , для которого вы, конечно, предоставите четко определенные ограничения. Если это так, то мы почти предоставляем окончательное решение. Поскольку, естественно, ваше мнение имеет решающее значение в этой ситуации, вам также следует проанализировать эти идеи, а затем сообщить мне ваши выводы, чтобы мы могли сделать последние шаги.
Возможное второе продвижение
К сожалению, общение прекратилось несколько недель назад, я полагаю, из-за рабочих обязательств, которые вы должны выполнить, что вполне разумно. Я был бы гораздо более доволен, если бы мы разработали более стабильную и надежную модель, но из-за наших предыдущих взаимодействий я могу предположить, что смог указать вам правильное направление.
В дополнение к тому, что уже было представлено в этом процессе вопросов и ответов, я считаю, что предоставление нового прогресса по сравнению с предыдущими моделями данных может быть полезным для других искателей с аналогичной проблемой. Итак, я создал ...
Предварительная модель данных организаций и профилей - второй шаг вперед
Как видно из такой модели данных, я удалил отношение « многие ко многим», которое я изобразил в предыдущих моделях, между « Profile
и» Address
, поскольку данное Profile
уже связано с « один ко многим» Addresses
через принадлежащее ему Locations
.
Другое изменение, проиллюстрированное в этом новом прогрессе, заключается в том, что теперь он включает в себя возможность того, что данное Location
может принадлежать одному-многим Profiles
. Следовательно, я изменил Location
ПЕРВИЧНЫЙ КЛЮЧ (отклонив LocationOwnerProfileId
атрибут), а затем добавил ассоциативную сущность ( многие ко многим ), которая связана Profile
с Location
.
Заметки
1. IDEF1X - это очень рекомендуемая методика моделирования данных, которая была определена в качестве стандарта в декабре 1993 года Национальным институтом стандартов и технологий США ( NIST ).
2. Это вхождение (супер) кластера подтипа типа . Если вам интересно, вот ответ, в котором я более подробно расскажу о таких отношениях.
3. Пример иерархического отношения «многие ко многим» , очень похожий на структуру, которая дала окончательное решение «Проблемы исследования деталей» . Такое решение, конечно же, было представлено доктором Эдгаром Фрэнком Коддом в его чрезвычайно влиятельной работе 1970 года «Реляционная модель данных для больших общих банков данных» .
4. Как таковой, это пример иерархического отношения один-ко-многим (или многие-к-одному) .