Чудово, що ви витрачаєте час на розуміння, класифікацію та моделювання даних, з якими ви маєте справу, оскільки, з мого особистого досвіду, все це робить весь процес розвитку простішим та дуже гнучким для майбутніх змін. І я цілком впевнений, що ви також це вже знаєте.
Попередня модель даних та припущені правила ведення бізнесу
Я визначив перелік правил бізнесу, які я припустив, прочитавши ваше запитання та уважно вивчивши ваші діаграми, щоб описати моє розуміння ваших специфікацій. Визначивши такий список, я вивів модель даних 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) Зв'язок між "
Organization
a" 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
. Отже, я змінив Location
PRIMARY KEY (по відхиляючи LocationOwnerProfileId
атрибут) , а потім додав асоціативний об'єкт ( багато-до-багатьох ) , що пов'язано Profile
з Location
.
Примітки
1. IDEF1X - це дуже рекомендована методика моделювання даних, яка була визначена як стандарт в грудні 1993 р. Національним інститутом стандартів і технологій США ( NIST ).
2. Це виникнення кластеру (супер) типу підтипу . У випадку, якщо вас цікавить, ось відповідь, в якій я більш детально розглядаю подібні відносини.
3. Приклад ієрархічного взаємозв'язку «багато-багато» та дуже схожий на структуру, яка дала остаточне рішення «Проблеми вибуху частин» . Таке рішення, безумовно, було введено доктором Едгаром Фрекком Коддом у його надзвичайно впливовій статті 1970 р. "Реляційна модель даних для великих спільних банків даних" .
4. Таким чином, це примірник ієрархічного відношення «один до багатьох» (або «багато хто до одного») .