Чудово, що ви витрачаєте час на розуміння, класифікацію та моделювання даних, з якими ви маєте справу, оскільки, з мого особистого досвіду, все це робить весь процес розвитку простішим та дуже гнучким для майбутніх змін. І я цілком впевнений, що ви також це вже знаєте.
Попередня модель даних та припущені правила ведення бізнесу
Я визначив перелік правил бізнесу, які я припустив, прочитавши ваше запитання та уважно вивчивши ваші діаграми, щоб описати моє розуміння ваших специфікацій. Визначивши такий список, я вивів модель даних IDEF1X [1], яку вирішив завантажити як .PDF документ у зовнішню платформу (Dropbox), оскільки завдяки своєму формату ця модель даних не вписується добре у вбудований образ. Ці два інструменти будуть корисними як посилання на деякі важливі моменти, які я перелічу нижче в розділі « Аспекти вирішення», щоб продовжувати рухатися вперед .
По-перше, ось…
Оскільки це лише те, що попередньо, розглянемо це як засіб, який допомагає нам досягти бажаної кінцевої моделі даних.
Передбачаються правила ведення бізнесу
Згадана попередня модель даних була виведена з набору правил бізнесу (випливає з вашого запитання), які я перерахую так:
Організації та профілі
Зауважте, що Profileв даний час розуміється як синонім для Person.
OrganizationЄ одним один-ко-многим Profiles .
OrganizationЄ одним один-ко-многим Organizations .
- Член
Organizationє членом одного до багатьох Organizations .
- А
Profileє членом одного до багатьохOrganizations .
- A
Profileє другом одного на багатьох Profiles .
- А
Profileє членом одного до багатьох Profiles .
Місцеположення та адреси
- А
Organizationволодіє одним-багатьом Locations .
- A
Locationкласифікується за множиною LocationTypes ( лише одна в заданий момент часу).
- А
Locationможе мати один-багато-багато Addresses ( один Physical , один для Shipping, один для Billing, або той, який служить всім зазначеним цілям, або той, який поєднує дві цілі, і інший, який служить лише одному з них).
Дозвіл Addressможе зберігатися одним-багатьом Profiles або, кажучи іншим способом, Profileзберіганням одного-до-багатьох Addresses .
Конкретний Addressможе бути використаний один-ко-многим Profiles (служить Physicalдля одного Profile , використовується для Billingна інший один , і т.д.). Отже, Addressтвір аналогічно для Locationsі Profiles.
- Таким чином, індивідуум
Addressможе бути, в той же час , типу Physical, Shipping і Billing .
Місцеположення та ролі
- A
Locationвідкриває один-до-багатьох Roles .
- А
Roleможе бути здійснено у множині Locations .
- A
Profile(після того, як його встановлено як Member" 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, і ми можемо визначити:
- (a) Зв'язок між "
Organizationa" Personяк " Membership".
- (b) Зв'язок між a
Personта іншим, відмінним Personвід " Friendhip".
- (c) Ми ще не повинні знайти значущого імені, щоб описати стосунки між людиною
Organizationта іншим іншим Organization.
- Отже, дайте мені знати, що ви думаєте про (a), (b) та (c).
Чи можливо, Organizationщоб a Friend(або a Member) одного-до-багатьох різних Organizationsодночасно? Або можливо лише для того, Organizationщоб мати лише стосунки з виключно одним різнимOrganization?
Послідовна модель даних із зображенням першого заздалегідь
Зважаючи на ваші відповіді та рішення на майбутні аспекти, які я перелічив вище, я створив наступне…
Хоча я до цього часу не відчуваю себе досить комфортно, ця нова модель даних виражає такі ділові правила:
ProfileЄ або Organization чиPerson . [2]
- А
Profileможе бути другом, який пропонує одного, до багатьох FriendProfiles , а 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 рекомендує використовувати імена ролей для позначення ІМЕЧНИХ КЛЮЧІВ, щоб зафіксувати значення таких атрибутів відповідно до сутності, в якій він використовується. Варто також зазначити, що це також сильно пов'язане з концепцією міграції первинних ключів . Власне кажучи, використання імен ролей передує 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 . Отже, я змінив LocationPRIMARY KEY (по відхиляючи LocationOwnerProfileIdатрибут) , а потім додав асоціативний об'єкт ( багато-до-багатьох ) , що пов'язано Profileз Location.
Примітки
1. IDEF1X - це дуже рекомендована методика моделювання даних, яка була визначена як стандарт в грудні 1993 р. Національним інститутом стандартів і технологій США ( NIST ).
2. Це виникнення кластеру (супер) типу підтипу . У випадку, якщо вас цікавить, ось відповідь, в якій я більш детально розглядаю подібні відносини.
3. Приклад ієрархічного взаємозв'язку «багато-багато» та дуже схожий на структуру, яка дала остаточне рішення «Проблеми вибуху частин» . Таке рішення, безумовно, було введено доктором Едгаром Фрекком Коддом у його надзвичайно впливовій статті 1970 р. "Реляційна модель даних для великих спільних банків даних" .
4. Таким чином, це примірник ієрархічного відношення «один до багатьох» (або «багато хто до одного») .