Замечательно, что вы нашли время, чтобы понять, классифицировать и смоделировать данные, с которыми вы работаете, поскольку, исходя из моего личного опыта, все это делает весь процесс разработки более простым и очень гибким для будущих изменений. И я совершенно уверен, что вы тоже об этом уже знаете.
Предварительная модель данных и предполагаемые бизнес-правила
Я определил список бизнес-правил, которые я принял после прочтения вашего вопроса и тщательного изучения ваших диаграмм, чтобы описать мое недопонимание ваших спецификаций. После определения такого списка я получил модель данных 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(как только он был установлен как Membera 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в конкретном или . С моей точки зрения, сначала нужно связать с , а затем это назначило бы сказанное для выполнения в конкретном , но вы лучше знаете сценарий, поэтому эти правила могут быть ненужными. В связи с этим, я буду настаивать на том , о том , что было бы очень полезно для меня , чтобы знать контекстное описание или значение , что пользователи в будущем этой структуру данных Отдать , иLocationOrganizationPersonPersonOrganizationOrganizationPersonRoleLocationOrganizationProfileLocation, но я понимаю, что это может считаться конфиденциальной информацией, поэтому это будет ограничением.
С текущей структурой кажется, что каждый ( 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. Как таковой, это пример иерархического отношения один-ко-многим (или многие-к-одному) .