To wspaniałe, że poświęcasz czas na zrozumienie, klasyfikację i modelowanie danych, z którymi masz do czynienia, ponieważ z mojego osobistego doświadczenia wszystko to sprawia, że cały proces rozwoju jest łatwiejszy i bardzo elastyczny na przyszłe zmiany. I jestem całkiem pewien, że już o tym wiecie.
Wstępny model danych i przyjęte reguły biznesowe
Zdefiniowałem listę reguł biznesowych, które przyjąłem po przeczytaniu twojego pytania i dokładnym zbadaniu twoich diagramów, aby opisać moje rozumienie twoich specyfikacji. Po zdefiniowaniu takiej listy wyprowadziłem model danych IDEF1X [1], który postanowiłem załadować jako dokument .PDF na platformę zewnętrzną (Dropbox), ponieważ ze względu na swój format ten model danych nie pasuje dobrze do osadzonego obrazu. Te dwa instrumenty będą przydatne jako odniesienia do niektórych ważnych punktów, które wymienię poniżej w części zatytułowanej Aspekty do rozwiązania w celu dalszego postępu .
Po pierwsze, oto…
Ponieważ jest to tylko to, wstępnie, rozważ to jako środek, który pomoże nam osiągnąć pożądany model danych końcowych.
Zakładane reguły biznesowe
Wspomniany wstępny model danych został wyprowadzony ze zbioru reguł biznesowych (wywnioskowanych z twojego pytania), które wymienię w następujący sposób:
Organizacje i profile
Zauważ, że Profile
obecnie jest rozumiany jako synonim Person
.
- Jest
Organization
przyjacielem jednego do wielu Profiles
.
- Jest
Organization
przyjacielem jednego do wielu Organizations
.
- Jest
Organization
członkiem jeden do wielu Organizations
.
- A
Profile
jest członkiem jeden do wieluOrganizations
.
- A
Profile
jest przyjacielem jednego do wielu Profiles
.
- A
Profile
jest członkiem jeden do wielu Profiles
.
Lokalizacje i adresy
- Jest
Organization
właścicielem jeden do wielu Locations
.
- A
Location
jest klasyfikowany według jednego do wielu LocationTypes
( tylko jeden w danym momencie).
Location
Może mieć jeden-do-wielu Addresses
( jeden Physical
, jeden za Shipping
, jeden za Billing
, lub jeden , który służy wszystkim wspomnianych celów, lub jeden , który łączy w sobie dwa cele i kolejny, który służy tylko jeden z nich).
Address
Mogą być przechowywane przez jeden-do-wielu Profiles
lub, innymi słowy, A Profile
utrzymuje jeden-do-wielu Addresses
.
Konkretny Address
mogą być wykorzystywane przez jeden-do-wielu Profiles
(będący Physical
w jednej Profile
i stosuje do Billing
przez inny jeden , etc.). Więc Address
działa w podobny sposób dla Locations
i Profiles
.
- W ten sposób, jednostka
Address
może być, w tym samym czasie , w rodzaju Physical
, Shipping
i Billing
.
Lokalizacje i role
Location
Otwiera jeden-do-wielu Roles
.
- A
Role
może być przeprowadzany w trybie jeden do wielu Locations
.
- A
Profile
(po ustawieniu jako Member
an Organization
) może przeprowadzać jeden do wielu Roles
, jeden do wielu Locations
(ale tylko jeden konkretny Role
w każdym Location
w danym momencie, tj. Nigdy dwa lub więcej Roles
w tym samym czasie ).
Aspekty do rozwiązania, aby móc iść naprzód
Aby dalej rozwijać rozdzielczość Twojego modelu danych, oto lista istotnych punktów, które po ich opracowaniu pomogą nam osiągnąć ten cel:
Zakładam, że termin Profile
w twoim kontekście ma podobne (lub takie samo) znaczenie jak Person
, ale może być nieco inny. Czy w ten sposób powiedziałbyś, że w twoim scenariuszu podmioty Organization
i Person
są podtypami Profile
?
Czy Profile
(lub Person
) może posiadać jeden do wielu EmailAddresses
, czy też Profile
(lub Person
) może być ustawiony na dokładnie jeden EmailAddress
?
Czy chciałbyś, aby zapewnić możliwość za Organization
którą należy się kontaktować za pośrednictwem Telephone
a Email
, czy chcesz ograniczyć to być możliwe tylko dla Profile
(lub Person
)?
Zakładam, że a Location
jest ustawione na dokładnie jeden Address
tego typu Physical
, czy to jest poprawne?
Czy możliwe Location
jest współdzielenie jednego do wielu różnych, Organizations
czy w przeciwnym razie Location
może być własnością tylko jednego Organization
?
W komentarzach stwierdziłeś, że fakt bycia a Member
i a Friend
jest taki sam. Jak widać w moim proponowanym wstępnym modelu danych, śledziłem oryginalne specyfikacje i przedstawiłem wszystkie możliwe kombinacje członkostwa i przyjaźni pomiędzy Organization
i Profile
(lub Person
) w różnych podmiotach, ponieważ uważam, że może to być pomocne w określeniu najlepszego możliwego struktura dla tej części twojego scenariusza. W tym sensie:
- Zakładam, że oświadczenie
an Organization is a Member of another Organization
ma inne skutki niż oświadczenie a Profile (or Person) is a Member of an Organization
dotyczy podmiotu wywoływanego Location
.
- Jak widać w modelu danych, myślę, że
Role
z Owner
jest ważna tylko dla Organization
i do mnie, ważne Roles
dla Profile
(lub Person
), Wewnątrz Location
są Admin
i Member
. Co o tym sądzisz? Ponieważ masz bezpośredni kontakt z regułami biznesowymi dotyczącymi Twojej sytuacji, musisz mi powiedzieć, czy moje założenia są prawidłowe.
Czy Profile
(lub Person
) może grać inaczej Roles
w tym samym Location
? tzn Czy Person
będzie w tym samym czasie, Admin
a także Member
o tym samym Location
? Jakie są zasady w tym zakresie?
Myślę, że to samo Profile
(lub Person
) może grać inaczej Roles
w różnych Locations
. Na przykład: Określony Profile
(lub Person
) to „Administrator” w Location
„1”, a ten sam Profile
(lub Person
) to „ Member
” w Location
„2” w tym samym czasie. Czy mam rację?
Czy jest możliwe, aby konkretny Location
miał LocationTypes
jednocześnie inne, czy też konkretna osoba Location
może trzymać dokładnie jeden LocationType
?
Czy atrybut Organization.Website
reprezentuje adres strony internetowej konkretnej organizacji, takiej jak „dba.stackexchange.com”?
Jeśli Profile
„1” (rozumiane jako Person
) jest Member
(lub Friend
) z Profile
„2”, czy możliwe jest, aby Profile
„1” przeprowadził akcję Role
w Location
posiadaniu Profile
„2”? Uważam, że takie scenariusze są ważne tylko dla relacji między Organization
ai Member
Person
tak, co sądzisz?
W podobny sposób, jeśli Organization
„1” jest Member
(lub Friend
) z Organization
„2”, czy możliwe jest, aby Organization
„1” przeprowadził akcję Role
w Location
posiadaniu Organization
„2”? Ponownie myślę, że tego rodzaju scenariusze są ważne tylko dla relacji między Organization
i a Member
Person
, czy to prawda?
W związku z tym - pisząc te pytania - myślę, że rozsądnie byłoby powiedzieć, że istnieją tylko trzy różne rodzaje relacji obejmujące Organizations
i Persons
, i możemy zdefiniować:
- (a) Relacja między
Organization
a a Person
jako „ Membership
”.
- (b) Związek między a
Person
a innym innym Person
jak „ Friendhip
”.
- (c) Musimy jeszcze znaleźć sensowne imię, aby opisać relację między jednostką
Organization
a inną osobą Organization
.
- Więc daj mi znać, co myślisz o (a), (b) i (c).
Czy jest możliwe, Organization
aby być Friend
(lub a Member
) jednym do wielu różnych Organizations
jednocześnie? Lub możliwe jest tylko, Organization
aby mieć związek tylko z jednym innymOrganization?
Kolejny model danych przedstawiający pierwszy postęp
W nawiązaniu do twoich odpowiedzi i rezolucji dotyczących oczekujących aspektów, które wymieniłem powyżej, stworzyłem następujące…
Chociaż nie czuję się jeszcze z tym komfortowo, ten nowy model danych wyraża następujące reguły biznesowe:
Profile
Jest albo Organization
lubPerson
. [2]
- A
Profile
może być przyjacielem oferującym jeden do wielu FriendProfiles
, a Profile
może być przyjacielem przyjmującym jeden do wielu FriendProfiles
. [3]
Location
Może składać się z jednego do wielu Locations
. [4]
Odpowiedzi na twoje kolejne szczegółowe komentarze
Bardzo interesujące jest dla mnie odnotowanie / złożenie separacji problemów [np. LocationAddress i ProfileAddress] - ponieważ oczywiście chciałem się w pośpiechu i utrzymać je wszystkie bez właściwych relacji [zabawnie, nie było dobrze z moim oryginalnym ERD].
Tak, to dobre porównanie, chociaż nie nazwałbym tego oddzieleniem problemów (co jest z pewnością podstawową zasadą programowania i projektowania aplikacji), ponieważ termin ten zwykle odnosi się do etapu tworzenia aplikacji i obecnie znajdujemy się w etap zrozumienia danych i zaprojektowania ich logicznej struktury.
Z mojego osobistego doświadczenia uważam, że ta faza ma związek z umieszczeniem istotnych rzeczy w ich całym kontekście, wiąże się z dostrzeżeniem powiązań między różnymi podmiotami, które są istotne w danym scenariuszu zainteresowania, a następnie przedstawiające te rzeczy w modelu danych. W konkretnym przypadku, o którym komentujesz, Address
jednostka może mieć różne rodzaje powiązań z innymi jednostkami, jedną z drugą, Profile
a drugą z nią Location
.
I tak, gdy coś nie wydaje się właściwe lub naturalne , może to być znak, że należy włożyć więcej wysiłku, aby zrozumieć odpowiednie dane. W ten sposób, Address
byt jest jedną z rzeczy, które uważam za wymagające większej uwagi, ponieważ uważam, że relacja między Profile
ai Address
może być obsługiwana za pomocą Location
bytu (ze względu na fakt, że każdy Location
musi mieć co najmniej jedną fizyczną Address
), dlatego mógł odwołać ProfileAddress
asocjacyjną podmiot przedstawiony w najnowszym modelu, ale należy kontynuować analizowanie tych punktów i daj mi znać swoje pomysły.
Ponadto, czy powszechną praktyką w IDEF1X jest zmiana oznaczeń PK / FK w jednostkach dla lepszej czytelności [np. ProfileId - LocationOwnerProfileId]?
Tak, to bardzo sprytna uwaga od ciebie, ponieważ IDEF1X zaleca stosowanie nazw ról do określania KLUCZÓW ZAGRANICZNYCH, aby uchwycić znaczenie takich atrybutów zgodnie z jednostką, w której są używane. Warto również zauważyć, że jest to również silnie związane z koncepcją migracji kluczy podstawowych . W rzeczywistości użycie nazw ról poprzedza IDEF1X, ponieważ zostało pierwotnie zaprezentowane przez dr EF Codda w jego zasadniczym tekście z 1970 roku. W ten sposób wyraźnie widać wierność, jaką standard IDEF1X utrzymuje wobec modelu relacyjnego .
Byłbym zaintrygowany, aby dowiedzieć się, czego nie lubisz / czujesz, że nie modeluje, z / w rozwiązaniu?
Oprócz opisanych już powyżej szczegółów na temat Address
podmiotu, nie jestem pewien, czy Roles
przeprowadzona przez dany Profile
w sposób szczególny Location
są równoważne dla Organization
lub Person
. Z mojego punktu widzenia Person
najpierw trzeba skojarzyć z Organization
, a następnie Organization
mianować powiedziane, Person
aby wykonać Role
konkretny Location
, ale znasz scenariusz lepiej, więc zasady te mogą być niepotrzebne. W związku z tym, mam zamiar domagać się o tym, że byłoby to bardzo pomocne dla mnie znać opis kontekstowe lub znaczenia , że użytkownicy przyszłości tej struktury danych dać Organization
, Profile
iLocation
, ale rozumiem, że można to uznać za informacje poufne, więc byłoby to ograniczenie.
Przy obecnej strukturze wydaje się, że każdy ( Organization
lub Person
) może być powiązany z kimkolwiek (ponownie Organization
lub Person
) i może być / rób cokolwiek ( Role
) w dowolnym miejscu ( Location
), ale perharps, właśnie tego oczekują od ciebie i użytkownicy od tej bazy danych , dla których oczywiście zapewnisz dobrze określone ograniczenia. Jeśli tak, to prawie zapewniamy ostateczne rozwiązanie. Ponieważ oczywiście Twoja opinia jest decydująca w tej sytuacji, powinieneś również przeanalizować te pomysły, a następnie poinformować mnie o swoich wnioskach, abyśmy mogli podjąć ostatnie kroki.
Realna druga zaliczka
Niestety, komunikacja zatrzymała się kilka tygodni temu, jak sądzę, z powodu zobowiązań do pracy, które musisz spełnić, co jest całkowicie uzasadnione. Byłbym o wiele bardziej zadowolony, gdybyśmy opracowali bardziej stabilny i solidny model, ale z powodu naszych wcześniejszych interakcji mogę założyć, że byłem w stanie wskazać ci właściwy kierunek.
Oprócz tego, co zostało już przedstawione w tym procesie pytań i odpowiedzi, uważam, że zapewnienie nowych postępów w stosunku do poprzednich modeli danych może być pomocne dla innych osób poszukujących z podobnym problemem. Stworzyłem…
Organizacje i profile Wstępny model danych - drugi postęp
Jak widać w takim modelu danych, usunąłem relację wiele do wielu , którą przedstawiłem w poprzednich modelach pomiędzy Profile
i Address
, ponieważ dane dane Profile
są już powiązane z relacjami jeden do wielu Addresses
za pośrednictwem ich własności Locations
.
Kolejną zmianą zilustrowaną w tym nowym postępie jest fakt, że obejmuje on teraz możliwość, że dana osoba Location
może być własnością jednego do wielu Profiles
. W związku z tym zmieniłem Location
KLUCZ PODSTAWOWY (odrzucając LocationOwnerProfileId
atrybut), a następnie dodałem jednostkę asocjacyjną ( wiele do wielu ), która się Profile
z tym wiąże Location
.
Notatki
1. IDEF1X jest wysoce godną polecenia techniką modelowania danych, która została zdefiniowana jako standard w grudniu 1993 r. Przez amerykański Narodowy Instytut Norm i Technologii ( NIST ).
2. Jest to występowanie (super) klastra podtypu typu . Jeśli jesteś zainteresowany, oto odpowiedź, w której szczegółowo omawiam tego rodzaju relacje.
3. Przykład relacji hierarchicznej „wiele do wielu” i jest bardzo podobny do struktury, która dała ostateczne rozwiązanie „problemu eksplozji części” . Takie rozwiązanie zostało oczywiście wprowadzone przez dr Edgara Franka Codda w jego niezwykle wpływowym artykule z 1970 r. „Relacyjny model danych dla dużych wspólnych banków danych” .
4. Jako taki, jest to przykład relacji hierarchicznej jeden do wielu (lub wiele do jednego) .