Я создаю концептуальную диаграмму [да, я знаю, что я включил атрибуты и ключи - но это только для меня, чтобы консолидировать то, что я делаю во время обучения] - поэтому, пожалуйста, рассматривайте ее как концептуальную с акцентом на отношения и а не таблицы как на диаграмме;)
Мое препятствие заключается в следующем: я пытаюсь найти наилучший способ моделирования отношений между Профилем, Местоположением и Организацией.
Прежде всего, ПРАВИЛА:
- Один или несколько профилей могут быть членами / друзьями одной или нескольких организаций ; и наоборот.
- Один или несколько профилей могут быть членами / друзьями других профилей.
- Одна или несколько организаций могут быть членами / друзьями других организаций.
Друг и Участник отличаются тем, что Друзья похожи только на чтение, а Участники [в зависимости от уровня] имеют полный доступ к изменениям.
Чтобы усложнить ситуацию, у Местоположений есть свой собственный набор «дополнительных» обновляемых правил, например, Организации принадлежит два Местоположения , но в зависимости от правил Местоположения, Участник [ Профиль ] этой Организации может иметь полный доступ в одном Местоположении, но ограниченный доступ в разное. [Извините: вам, скорее всего, придется открыть изображение в другом окне для лучшего размера просмотра.]
Таким образом, как вы можете видеть, концепция профилей и организаций во многом совпадает с концепцией друзей и членов, которую еще предстоит смоделировать [... которая, я думаю, будет обрабатываться так же, как текущие промежуточные таблицы с настройкой Owner / Admin / Member / Friend и т.д. в записи]. Следовательно, почему я думаю о следующей концепции:
См. Option.2 на изображении выше: это приведет к удалению текущих таблиц Organization и Organization_Locations и их связей, заменив их на Организационную таблицу Option.2 в качестве несколько рекурсивных отношений с Profile .
Я полагаю, суть вопроса в том, слишком ли я программно склонен к полиморфизму в ущерб простоте и гибкости, полностью запутываясь в этом процессе;)
Заранее спасибо за мысли, высоко ценится - М :).
Пересмотренная схема:
В ответ на вопросы MDCCL:
- Да, профиль составлен из одного человека и имеет то же значение - хотя, куда направлено ваше обоснование - я считаю, что вы правы: организация и человек могут быть подтипами профиля ; следовательно, профиль состоит из одного человека или одной организации.
- Один адрес электронной почты на профиль.
- Да. Как указано выше, у организации должен быть хотя бы адрес электронной почты.
- Правильно, один фиксированный адрес.
- Это возможность, но редкость - хотя из того, что я изучаю, - поэтому следует смоделировать это для будущего долголетия и т. Д., И просто для подтверждения, что Местоположение может принадлежать более чем одному человеку.
Местоположение определенно является неотъемлемой частью между большинством других. Возможно, я проясню, что можно сделать кратко, а затем позволю вам прочитать хотя бы другие мои ответы, которые, мы надеемся, сначала будут иметь полезные дополнения к этому вопросу [ затем посмотрите мой ответ на # 6 в конце ];) Re: Владелец роли.
An **Organization** can be an Owner of zero or more **Locations**.
A Person can be an owner of zero of more Locations
[следовательно, как вы и предполагали ранее; Проще говоря, профиль может быть владельцем одного или нескольких местоположений.Да, профиль , который является владельцем из Откуда принимает весь Role Permissions [супер пользователь]; профиля , что является Администратор может изменить некоторые детали Места , но в основном помогает / редактирует деталь / данные , подаваемые с помощью все другой Profile / с - это в первую очередь будет поставляться на «Basic Member / s» упомянутого Местонахождение / с; который оставляет Основной Участник , который может только для чтения все связанные детали Местоположения и предоставляет данные, которые должны проверяться Администратором / Владельцем . Помимо этого, любой профиль[Organization / Person] во многом похожа на базового участника «только для чтения» - давайте называть его « Гость», но только в том случае, если Местоположение установлено как « Открытое» (а не « Частное» ), хотя они не могут предоставлять входные данные, как базовый участник может ,
- Верный.
- Ваша интуиция удивительна! Да,
it is foreseen that a single Location could contain one to many LocationTypes
- чтобы еще больше усложнить ситуацию - ожидается, что эти отдельные LocationTypes могут иметь различные разрешения для профилей, связанных с «родительским» местоположением; из которых разрешения будут фильтроваться от Location до LocationType / s [так же, как разрешения безопасности папки ОС]. Я отмечаю, что через вашу диаграмму вы можете ссылаться на тип больше как описание? - Да.
- Смотрите 12.
- Правильно, способность Profile1 [Персона или Организация] воздействовать на Местоположения, принадлежащие Profile2 [Персона или Организация] [если они являются Другом / Участником с правильными разрешениями], имеет первостепенное значение.
- Очень разумно - а) согласен. б) согласен c) Да, хм? ... Возможно, это должно быть примерно так же, как профиль [person] для Profile [person] = Friends . Каким бы ни было описание, оно будет вращаться вокруг Местоположения , так как Организация будет действовать в отношении другого Местоположения Организации ; хотя с семантической точки зрения, я сомневаюсь, что какая-либо Организация захочет стать подчиненной в качестве «члена» организации этого местоположения, чтобы иметь возможность «независимо от того, насколько хороша причина».
[6]. Это все еще немного серо для меня, но здесь идет ... Возможно, к моему ущербу, сходство между отношениями между членами и друзьями настолько близко, что я подумал объединить их; Оглядываясь назад на вашу диаграмму и интерпретацию, вы, возможно, правы, если будете разделять их [ я собирался разграничить отдельные отношения с помощью свойства enum: Owner / Admin / Member / Friend ]. Ваша концепция, например, такая: Местоположение, которое принадлежит Организации, будет иметь ноль, чтобы множество Профилей [Персона или Организация] воздействовали на него, хотя должна быть четкая разница между тем, как Профили действуют на местоположение через его отношение [Участник или Друг. ] обозначается через роли.So perhaps, the default relation between any Profile is Friend [much like Guest at Answer#7], enabling them to view the read-only Location data and msg/email the Location Owner/Admin - but not allow them to receive Location updates, news, etc., as a Member would.
источник
Ответы:
Замечательно, что вы нашли время, чтобы понять, классифицировать и смоделировать данные, с которыми вы работаете, поскольку, исходя из моего личного опыта, все это делает весь процесс разработки более простым и очень гибким для будущих изменений. И я совершенно уверен, что вы тоже об этом уже знаете.
Предварительная модель данных и предполагаемые бизнес-правила
Я определил список бизнес-правил, которые я принял после прочтения вашего вопроса и тщательного изучения ваших диаграмм, чтобы описать мое недопонимание ваших спецификаций. После определения такого списка я получил модель данных 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
.Profile
(как только он был установлен какMember
aOrganization
) может выполнять один ко многим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
и aFriend
- это одно и то же. Как вы можете видеть в моей предложенной предварительной модели данных, я следовал за вами оригинальными спецификациями и изобразил все возможные комбинации членства и дружбы между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»? Опять же, я думаю, что такого рода сценарии действительны только для отношений между aOrganization
и aMember
Person
, верно ли это?В связи с этим -когда я пишу эту вопросы- я думаю , что было бы разумно сказать , что есть только три различные виды отношений с участием
Organizations
иPersons
, и мы можем определить:Organization
иPerson
как «Membership
».Person
и другим отличаютсяPerson
как «Friendhip
».Organization
и другим человекомOrganization
.Возможно ли одновременно
Organization
бытьFriend
(или аMember
) из одного ко многим разнымOrganizations
? Или это возможноOrganization
только иметь отношения только с одним другимOrganization?
Последовательная модель данных, изображающая первое продвижение
Обращаясь к вашим ответам и решениям в отношении ожидающих рассмотрения аспектов, которые я перечислил выше, я создал следующее ...
Хотя мне пока не очень комфортно с этим, новая модель данных выражает следующие бизнес-правила:
Profile
Является либоOrganization
илиPerson
. [2]Profile
может быть другом одного ко многимFriendProfiles
, а aProfile
может быть другом одного ко многимFriendProfiles
. [3]Location
может состоять из одного ко многимLocations
. [4]Ответы на ваши последующие конкретные комментарии
Да, это хорошее сравнение, хотя я бы не назвал это разделением интересов (что, безусловно, является фундаментальным принципом в разработке и разработке приложений), поскольку этот термин обычно относится к стадии разработки приложений, и в настоящее время мы находимся в этап понимания данных и проектирования его логической структуры.
Исходя из моего личного опыта, я считаю, что эта фаза связана с тем, чтобы поместить важные вещи во весь их контекст, она связана с наблюдением ассоциаций, существующих между различными объектами, которые имеют отношение к конкретному сценарию интереса, а затем изображая эти вещи в модели данных. В конкретном случае, о котором вы комментируете,
Address
сущность может иметь различные виды связей с другими сущностями, одна с,Profile
а другая сLocation
.И, да, когда что-то не кажется правильным или естественным , это может быть признаком того, что нужно приложить больше усилий, чтобы понять соответствующие данные. Таким образом,
Address
сущность - это одна из тех вещей, которые, на мой взгляд, нуждаются в большем внимании, поскольку я считаю, что отношения между aProfile
и aAddress
можно обрабатывать посредствомLocation
сущности (поскольку каждыйLocation
должен иметь хотя бы одну физическуюAddress
), поэтому мы могли бы уволитьProfileAddress
ассоциативную сущность , изображенную в последней модели, но вы должны продолжать эти пункты анализируя и дайте мне знать ваши идеи.Да, это очень умное замечание с вашей стороны, поскольку 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. Как таковой, это пример иерархического отношения один-ко-многим (или многие-к-одному) .
источник
Я думаю, что вы пытаетесь объединить концепции из объектного моделирования и концепции из моделирования данных таким образом, чтобы это не помогло вам прояснить собственное понимание проблемы. Я надеюсь, что смогу немного избавиться от беспорядка без лишних разговоров.
Реляционная модель как таковая не поддерживает наследование, не говоря уже о полиморфизме. Это означает, что при моделировании реальной жизненной ситуации необходимо использовать довольно специализированный шаблон проектирования, который легко обрабатывается наследованием и полиморфизмом в объектной модели. Подробнее об этом особом шаблоне дизайна позже.
Когда модель ER была впервые разработана, она должна была быть независимой от реализации альтернативой реляционному моделированию. Сначала у него тоже не было ничего похожего на наследство. Но какое-то время, в 1980-х или 1990-х годах, модель была расширена, чтобы обеспечить некоторые из тех же выразительных возможностей, которые вы получаете с наследованием. Это было известно как «расширенная модель ER», но сегодня для всех практических целей модель ER включает в себя функции EER.
Одна особенность EER называется «обобщение / специализация». Вы можете найти и прочитать об этой концепции в Интернете. Gen-spec предоставляет те же возможности выразительности, что и классы и подклассы в объектной модели. Однако Gen-spec не занимается проблемами, связанными с дизайном реляционных таблиц для ситуации Gen-spec. Подробнее об этом позже.
В моделировании ER отношения всегда включают одни и те же объекты. Следовательно, дружеские отношения между организацией и профилем - это не то же самое, что дружеские отношения между профилем и другим профилем. Эти два отношения нуждаются в разных именах. Вы просто завяжетесь, если не будете следовать этому правилу.
Либо так, либо вам нужно придумать обобщенную сущность, для которой все организации, профили и, возможно, местоположения являются специализациями. Я недостаточно хорошо понимаю ваш случай, чтобы помочь вам с этим.
Двигаясь дальше, я замечаю, что вы объединяете свою реляционную модель и модель ER в единую модель. Большинство опытных архитекторов баз данных делают это. Но я советую вам держать две модели отдельно (хотя и примириться друг с другом), пока вы не овладеете навыком.
Наконец, как можно спроектировать реляционные таблицы, которые представляют ситуацию gen-spec? Попробуйте найти эти два шаблона проектирования «наследование таблиц классов» и «наследование отдельных таблиц». В Stackoverflow есть два тега для них. Есть также несколько хороших презентаций шаблонов в Интернете. Мне особенно нравится лечение Мартина Фаулера. Кажется, он знает, как думают объектные моделисты. Надеюсь это поможет.
источник