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 Profileobecnie jest rozumiany jako synonim Person.
- Jest
Organizationprzyjacielem jednego do wielu Profiles .
- Jest
Organizationprzyjacielem jednego do wielu Organizations .
- Jest
Organizationczłonkiem jeden do wielu Organizations .
- A
Profilejest członkiem jeden do wieluOrganizations .
- A
Profilejest przyjacielem jednego do wielu Profiles .
- A
Profilejest członkiem jeden do wielu Profiles .
Lokalizacje i adresy
- Jest
Organizationwłaścicielem jeden do wielu Locations .
- A
Locationjest klasyfikowany według jednego do wielu LocationTypes ( tylko jeden w danym momencie).
LocationMoż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).
AddressMogą być przechowywane przez jeden-do-wielu Profiles lub, innymi słowy, A Profileutrzymuje jeden-do-wielu Addresses .
Konkretny Addressmogą być wykorzystywane przez jeden-do-wielu Profiles (będący Physicalw jednej Profile i stosuje do Billingprzez inny jeden , etc.). Więc Addressdziała w podobny sposób dla Locationsi Profiles.
- W ten sposób, jednostka
Addressmoże być, w tym samym czasie , w rodzaju Physical, Shipping i Billing .
Lokalizacje i role
LocationOtwiera jeden-do-wielu Roles .
- A
Rolemoże być przeprowadzany w trybie jeden do wielu Locations .
- A
Profile(po ustawieniu jako Memberan Organization) może przeprowadzać jeden do wielu Roles , jeden do wielu Locations (ale tylko jeden konkretny Rolew każdym Locationw 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 Profilew 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 Organizationi Personsą 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 Organizationktórą należy się kontaktować za pośrednictwem Telephonea Email, czy chcesz ograniczyć to być możliwe tylko dla Profile(lub Person)?
Zakładam, że a Locationjest ustawione na dokładnie jeden Address tego typu Physical, czy to jest poprawne?
Czy możliwe Locationjest współdzielenie jednego do wielu różnych, Organizations czy w przeciwnym razie Locationmoże być własnością tylko jednego Organization ?
W komentarzach stwierdziłeś, że fakt bycia a Memberi a Friendjest 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 Organizationi 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 Organizationma inne skutki niż oświadczenie a Profile (or Person) is a Member of an Organizationdotyczy podmiotu wywoływanego Location.
- Jak widać w modelu danych, myślę, że
Rolez Ownerjest ważna tylko dla Organizationi do mnie, ważne Rolesdla Profile(lub Person), Wewnątrz Locationsą Admini 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 Rolesw tym samym Location? tzn Czy Personbędzie w tym samym czasie, Admina także Membero tym samym Location? Jakie są zasady w tym zakresie?
Myślę, że to samo Profile(lub Person) może grać inaczej Rolesw 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 Locationmiał LocationTypesjednocześnie inne, czy też konkretna osoba Locationmoże trzymać dokładnie jeden LocationType?
Czy atrybut Organization.Websitereprezentuje 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ę Rolew Locationposiadaniu Profile„2”? Uważam, że takie scenariusze są ważne tylko dla relacji między Organizationai Member Persontak, 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ę Rolew Locationposiadaniu Organization„2”? Ponownie myślę, że tego rodzaju scenariusze są ważne tylko dla relacji między Organizationi 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 Organizationsi Persons, i możemy zdefiniować:
- (a) Relacja między
Organizationa a Personjako „ Membership”.
- (b) Związek między a
Persona innym innym Personjak „ Friendhip”.
- (c) Musimy jeszcze znaleźć sensowne imię, aby opisać relację między jednostką
Organizationa inną osobą Organization.
- Więc daj mi znać, co myślisz o (a), (b) i (c).
Czy jest możliwe, Organizationaby być Friend(lub a Member) jednym do wielu różnych Organizationsjednocześnie? Lub możliwe jest tylko, Organizationaby 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:
ProfileJest albo Organization lubPerson . [2]
- A
Profilemoże być przyjacielem oferującym jeden do wielu FriendProfiles , a Profilemoże być przyjacielem przyjmującym jeden do wielu FriendProfiles . [3]
LocationMoż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, Addressjednostka może mieć różne rodzaje powiązań z innymi jednostkami, jedną z drugą, Profilea 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, Addressbyt jest jedną z rzeczy, które uważam za wymagające większej uwagi, ponieważ uważam, że relacja między Profileai Address może być obsługiwana za pomocą Locationbytu (ze względu na fakt, że każdy Locationmusi mieć co najmniej jedną fizyczną Address), dlatego mógł odwołać ProfileAddressasocjacyjną 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 Addresspodmiotu, nie jestem pewien, czy Rolesprzeprowadzona przez dany Profilew sposób szczególny Locationsą równoważne dla Organizationlub Person. Z mojego punktu widzenia Personnajpierw trzeba skojarzyć z Organization, a następnie Organizationmianować powiedziane, Personaby wykonać Rolekonkretny 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, ProfileiLocation, ale rozumiem, że można to uznać za informacje poufne, więc byłoby to ograniczenie.
Przy obecnej strukturze wydaje się, że każdy ( Organizationlub Person) może być powiązany z kimkolwiek (ponownie Organizationlub 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 Profilei Address, ponieważ dane dane Profilesą 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 Locationmoże być własnością jednego do wielu Profiles . W związku z tym zmieniłem LocationKLUCZ PODSTAWOWY (odrzucając LocationOwnerProfileIdatrybut), a następnie dodałem jednostkę asocjacyjną ( wiele do wielu ), która się Profilez 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) .