Relacje są wszędzie:między ludźmi, między organizacjami, między organizacjami i ludźmi. Pomyśl o byciu pracownikiem firmy, byciu członkiem zespołu projektowego lub byciu filią innej firmy. Czy istnieje prosty sposób na dokładne modelowanie i zarządzanie wszystkimi tymi relacjami? Czy możemy łatwo odpowiedzieć na pytanie „Kto wie kto?”
Szybki przegląd relacji
Dokładnie sposób, w jaki powstał ten podstawowy model, został opisany w moim poprzednim artykule, Elastyczne i łatwe w zarządzaniu projekty zestawień materiałowych (BOM).
W tym modelu i w konwencjonalnym projekcie BOM, 1st interactor
wydaje się być lepszą Party
w Relationship
– pracodawca zamiast pracownika, lider zespołu zamiast członka zespołu itp.
Oto, jak mogą wyglądać dane (z rolą każdej ze stron w nawiasach):
1 interaktor | 2 interaktorów |
---|---|
Widget Co. Inc. (pracodawca) | Menedżer 1 (pracownik) |
Widget Co. Inc. (pracodawca) | Menedżer 2 (pracownik) |
Widget Co. Inc. (pracodawca) | Pracownik 1 (pracownik) |
Widget Co. Inc. (pracodawca) | Pracownik 2 (pracownik) |
Widget Co. Inc. (pracodawca) | Pracownik 3 (pracownik) |
Widget Co. Inc. (pracodawca) | Pracownik 4 (pracownik) |
Menedżer 1 (odpowiedzialny za) | Pracownik 1 (podlega) |
Menedżer 1 (odpowiedzialny za) | Pracownik 2 (podlega) |
Menedżer 2 (odpowiedzialny za) | Pracownik 3 (podlega) |
Menedżer 2 (odpowiedzialny za) | Pracownik 4 (podlega) |
Bardziej wyrafinowany model
Wyobraź sobie, że chcesz zamodelować zespół projektowy w następujący sposób:
Źródło:https://www.edrawsoft.com/template-matrix -org-chart.php
Większość ról w tej hierarchii zespołu jest realna – m.in. analityk wymagań podlega analitykowi systemu. Innym sposobem patrzenia na to jest to, że analityk systemowy zarządza analitykiem wymagań.
Relacje między rolami można czytać od lewej do prawej (LTR) lub od prawej do lewej (RTL). Zwykle najlepiej jest trzymać się jednej lub drugiej konwencji – LTR lub RTL – ale w praktyce może się okazać, że są od tego wyjątki.
Zauważ też, że ten diagram pokazuje różne sposoby grupowania ról. Niektóre role są prawdziwe, jak mówiliśmy; inne są logiczne – np. grupa techniczna, grupa szkoleniowa, główny zespół i zespół wsparcia.
Można powiedzieć, że ten diagram definiuje strukturę zespołu z wykorzystaniem ról wymaganych do skompletowania zespołu deweloperskiego projektu. Różni się to od rzeczywistej instancji zespołu, która składałaby się z nazwisk prawdziwych osób w odniesieniu do każdej z ról.
Potrzebujemy więc modelu danych, który jest elastyczny i konfigurowalny , taki jak ten:
Żółte tabele zawierają metadane , a niebieskie tabele zawierają biznesowe bazy danych .
Ustawianie metadanych podstawy
Zaczniemy od wypełnienia party_type
stół. Ta tabela rozróżnia, czy impreza jest osobą, czy organizacją.
Zanim zrobimy wiele więcej, musimy również zdefiniować role w role_type
tabela metadanych:
Ładne imię | Typ imprezy |
---|---|
HM Revenue and Customs (HMRC) | Organizacja |
Internal Revenue Service (IRS) | Organizacja |
Usługa paszportowa | Organizacja |
To samo | Organizacja |
Spółka z ograniczoną odpowiedzialnością | Organizacja |
Publiczna spółka z ograniczoną odpowiedzialnością | Organizacja |
Wnioskodawca | Osoba |
Ja | Osoba |
Inżynieria CTO | Osoba |
Kierownik projektu | Osoba |
Specjalista ds. projektów | Osoba |
Analityk systemu | Osoba |
Analityk wymagań | Osoba |
Pracownik techniczny | Osoba |
Administrator systemu | Osoba |
Starszy inżynier sprzętu | Osoba |
Inżynier sprzętu | Osoba |
Starszy inżynier oprogramowania | Osoba |
Inżynier oprogramowania | Osoba |
Inżynier baz danych | Osoba |
Pomoc techniczna | Osoba |
Menedżer kontroli jakości | Osoba |
Projektant stron internetowych | Osoba |
Inżynier ds. kontroli jakości oprogramowania | Osoba |
Biuro projektu | Osoba |
Inżynier bezpieczeństwa informacji | Osoba |
Techniczne | Organizacja |
Szkolenie | Organizacja |
Zespół główny | Organizacja |
Zespół wsparcia | Organizacja |
Bez wątpienia zauważyłeś, że każda rola należy do osoby lub organizacji. Aby dać wyobrażenie o tym, co jest możliwe, dodałem kilka zewnętrznych organizacji, z którymi współpracuje nasza fikcyjna spółka z ograniczoną odpowiedzialnością, ABC Software Inc.
Dodawanie metadanych zatrudnienia
Następnym zadaniem jest zdefiniowanie prawidłowych par ról między pierwszym a drugim interaktorem. To z kolei określa rodzaje relacji, jakie mogą mieć strony. Zacznijmy wypełniać role_type_relationship
tabela metadanych z rolami pracowników firmy. W końcu nie możemy tworzyć zespołów bez uprzednich pracowników:
Typ pierwszej roli | Drugi typ roli | Kierunek opisu | Opis | Rodzaj relacji |
---|---|---|---|---|
Spółka z ograniczoną odpowiedzialnością | Inżynieria CTO | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Kierownik projektu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Specjalista ds. projektów | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Analityk systemu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Analityk wymagań | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Pracownik techniczny | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Administrator systemu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Starszy inżynier sprzętu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Inżynier sprzętu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Starszy inżynier oprogramowania | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Inżynier oprogramowania | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Inżynier baz danych | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Pomoc techniczna | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Menedżer kontroli jakości | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Projektant stron internetowych | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Inżynier ds. kontroli jakości oprogramowania | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Biuro projektu | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Inżynier bezpieczeństwa informacji | LTR | zatrudnia | PRAWDZIWE |
Spółka z ograniczoną odpowiedzialnością | Wnioskodawca | LTR | wybiera | PRAWDZIWE |
Załóżmy, że ABC Software Inc. zatrudni dwóch pracowników, Jane Smith i Alex Jones, na następujące stanowiska:
Relacje ze stronami | Zależność typu roli | |||
---|---|---|---|---|
Pierwszy partner (organizacja) | Drugi interaktor (osoba) | Pierwszy uczestnik interakcji (rola) | Drugi interaktor (rola) | Opis |
ABC Software Inc. | Jana Smith | Spółka z ograniczoną odpowiedzialnością | Inżynieria CTO | zatrudnia |
ABC Software Inc. | Alex Jones | Spółka z ograniczoną odpowiedzialnością | Kierownik projektu | zatrudnia |
Cofając się w czasie, zobaczysz, że ten związek zaczął się przed zatrudnieniem Jane Smith i Alexa Jonesa; musieli ubiegać się o pracę w ABC Software Inc. Relacja wyglądałaby tak:
Relacje ze stronami | Zależność typu roli | |||
---|---|---|---|---|
Pierwszy partner (organizacja) | Drugi interaktor (osoba) | Pierwszy uczestnik interakcji (rola) | Drugi interaktor (rola) | Opis |
ABC Software Inc. | Jana Smith | Spółka z ograniczoną odpowiedzialnością | Wnioskodawca | wybiera |
ABC Software Inc. | Alex Jones | Spółka z ograniczoną odpowiedzialnością | Wnioskodawca | wybiera |
Czy zaczynasz dostrzegać możliwości, jakie wzorzec relacji między stronami? obsługuje?
Nie mamy tabeli o nazwie applicant
i kolejna tabela o nazwie employee
, jakie można znaleźć w innych modelach. Jeśli się nad tym zastanowić, będą miały wiele takich samych atrybutów – imię i nazwisko, adres, data urodzenia itp.; musiałbyś skopiować wartości od applicant
do employee
po pomyślnym zatrudnieniu. Ale czy zaangażowani ludzie zostali przemienieni z jednej rzeczy w drugą? Oczywiście nie! To wciąż ci sami ludzie!
W rzeczywistości tylko relacja uległa zmianie pomiędzy ABC Software Inc. a Jane Smith lub Alexem Jonesem. I to jest dokładnie to, co modeluje wzorce relacji partyjnych.
Kontynuacja:Metadane zespołu projektowego
Zanim będziemy mogli utworzyć party_relationship
tabeli, aby określić, że Jane Smith zarządza Alexem Jonesem, musimy zdefiniować strukturę zespołu deweloperskiego projektu. To tylko kwestia parowania ról rodzica i dziecka w celu utworzenia prawidłowej hierarchii:
Typ pierwszej roli | Drugi typ roli | Kierunek opisu | Opis | Rodzaj relacji |
---|---|---|---|---|
Zespół rozwoju projektu | Inżynieria CTO | RTL | potencjalni klienci | PRAWDZIWE |
Inżynieria CTO | Kierownik projektu | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Analityk systemu | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Administrator systemu | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Specjalista ds. projektów | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Starszy inżynier oprogramowania | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Pomoc techniczna | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Projektant stron internetowych | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Inżynier ds. kontroli jakości oprogramowania | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Biuro projektu | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Inżynier bezpieczeństwa informacji | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Inżynier baz danych | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Pomoc techniczna | LTR | zarządza | PRAWDZIWE |
Kierownik projektu | Menedżer kontroli jakości | LTR | zarządza | PRAWDZIWE |
Analityk systemu | Analityk wymagań | LTR | zarządza | PRAWDZIWE |
Analityk wymagań | Pracownik techniczny | LTR | zarządza | PRAWDZIWE |
Administrator systemu | Starszy inżynier sprzętu | LTR | zarządza | PRAWDZIWE |
Starszy inżynier sprzętu | Inżynier sprzętu | LTR | zarządza | PRAWDZIWE |
Starszy inżynier oprogramowania | Inżynier oprogramowania | LTR | zarządza | PRAWDZIWE |
Dla wszystkich powyższych ról relacja jest odczytywana od lewej do prawej – np. kierownik projektu zarządza inżynierem bazy danych. Alternatywnie możesz przyjąć format od prawej do lewej (inżynier bazy danych zgłasza się do kierownika projektu), jeśli jest to preferowana konwencja.
Na koniec musimy zdefiniować relacje między naszymi dwoma nowymi pracownikami:
Relacje ze stronami | Zależność typu roli | |||
---|---|---|---|---|
Pierwszy partner (organizacja) | Drugi interaktor (osoba) | Pierwszy uczestnik interakcji (rola) | Drugi interaktor (rola) | Opis |
Jana Kowalski | Alex Jones | Inżynieria CTO | Kierownik projektu | zarządza |
Oczywiście możesz mieć dowolną liczbę zespołów w kształcie tej hierarchii. W pewnym sensie zatem party_relationship
jest instancją role_type_relationship
. Jest to podobne do sposobu, w jaki obiekt jest instancją klasy w programowaniu obiektowym.
W tym metadane logiczne
W odniesieniu do diagramu zespołu deweloperskiego projektu możemy również zdefiniować następujące logiczne relacje między rolami :
Typ pierwszej roli | Drugi typ roli | Kierunek opisu | Opis | Rodzaj relacji |
---|---|---|---|---|
Zespół główny | Specjalista ds. projektów | RTL | jest członkiem | LOGICZNE |
Zespół główny | Analityk systemu | RTL | jest członkiem | LOGICZNE |
Zespół główny | Analityk wymagań | RTL | jest członkiem | LOGICZNE |
Zespół główny | Pracownik techniczny | RTL | jest członkiem | LOGICZNE |
Zespół główny | Administrator systemu | RTL | jest członkiem | LOGICZNE |
Zespół główny | Starszy inżynier sprzętu | RTL | jest członkiem | LOGICZNE |
Zespół główny | Inżynier sprzętu | RTL | jest członkiem | LOGICZNE |
Zespół główny | Starszy inżynier oprogramowania | RTL | jest członkiem | LOGICZNE |
Zespół główny | Inżynier oprogramowania | RTL | jest członkiem | LOGICZNE |
Zespół główny | Inżynier baz danych | RTL | jest członkiem | LOGICZNE |
Zespół główny | Pomoc techniczna | RTL | jest członkiem | LOGICZNE |
Zespół główny | Menedżer kontroli jakości | RTL | jest członkiem | LOGICZNE |
Zespół główny | Projektant stron internetowych | RTL | jest członkiem | LOGICZNE |
Zespół główny | Inżynier ds. kontroli jakości oprogramowania | RTL | jest członkiem | LOGICZNE |
Zespół główny | Biuro projektu | RTL | jest członkiem | LOGICZNE |
Zespół główny | Inżynier bezpieczeństwa informacji | RTL | jest członkiem | LOGICZNE |
Zespół wsparcia | Projektant stron internetowych | RTL | jest członkiem | LOGICZNE |
Zespół wsparcia | Inżynier ds. kontroli jakości oprogramowania | RTL | jest członkiem | LOGICZNE |
Zespół wsparcia | Biuro projektu | RTL | jest członkiem | LOGICZNE |
Zespół wsparcia | Inżynier bezpieczeństwa informacji | RTL | jest członkiem | LOGICZNE |
Pamiętaj, że party_relationship
nigdy nie jest instancją logicznej role_type_relationship
. Jaki jest więc sens definiowania relacji logicznych?
Cóż, najlepiej to wyjaśnić na przykładzie. Wyobraź sobie, że chcesz wysłać list do wszystkich pracowników, którzy logicznie są członkami zespołu wsparcia. Aby utworzyć listę mailingową, napisz zapytanie, które zwróci wszystkie role interaktora LOGICAL Support Team 2 połączone z tymi samymi rolami interaktora REAL 2, połączone z party_relationship
, dołączył do 2 interakcji party
. Umożliwiłoby to uzyskanie nazwisk i adresów wszystkich zainteresowanych.
Specjalny przypadek
Być może zauważyłeś kilka nietypowych wpisów w role_type
tabela metadanych, a mianowicie:
Typ roli | Typ imprezy |
---|---|
Ja | Osoba |
Taki sam | Organizacja |
Oto dwa przypadki szczególnego przypadku, który ma miejsce, gdy strona ma ze sobą refleksyjną relację:
Typ pierwszej roli | Drugi typ roli | Kierunek opisu | Opis | Rodzaj relacji |
---|---|---|---|---|
Ja | Analityk systemu | LTR | zatrudniony | PRAWDZIWE |
Na przykład dla samozatrudnionego analityka systemu, interaktory 1 i 2 w party_relationship
wróć do tej samej party
wiersz – tzn. obie kolumny kluczy obcych zawierają dokładnie ten sam party.ID
wartość.
Znaczenie posiadania kontekstu
Wyobraź sobie, że mamy mały zespół analityków, który zasadniczo składa się z gałęzi między kierownikiem projektu a pracownikiem technicznym:
Typ pierwszej roli | Drugi typ roli | Kierunek opisu | Opis | Rodzaj relacji |
---|---|---|---|---|
Mały zespół analityczny | Kierownik projektu | RTL | potencjalni klienci | PRAWDZIWE |
Kierownik projektu | Analityk systemu | LTR | zarządza | PRAWDZIWE |
Analityk systemu | Analityk wymagań | LTR | zarządza | PRAWDZIWE |
Analityk wymagań | Pracownik techniczny | LTR | zarządza | PRAWDZIWE |
Każda z relacji istnieje tutaj również w strukturze zespołu ds. rozwoju projektu. Jak więc odróżnić jednego kierownika projektu → analityka systemu od innego?
Używamy kontekstu opcjonalnego klucz obcy między role_type_relationship
i role_type
. Dla małego zespołu analitycznego ustawiamy kontekst wszystkich relacji na „mały zespół analityczny”, element najwyższego poziomu. I robimy to samo w przypadku struktury zespołu projektowego. Kiedy przemierzamy strukturę, robimy to tylko dla typu zespołu, który nas interesuje.
Wzorzec BOM relacji ze stronami Plusy i minusy
Jeśli czytałeś moje inne artykuły na ten temat, prawdopodobnie zgadłeś, że jestem fanem wzorca projektowego Bill of Materials. Jest prosty, ale bardzo potężny. Zastrzeżeniem jest to, że musi być odpowiednio używany i musi być dostosowany, aby Twoja implementacja była możliwa do zarządzania.
W tej implementacji wzorca BOM relacji między stronami zapewniamy, że nasze relacje pozostają dokładne, najpierw określając dopuszczalne relacje między interaktorami istniejącymi w naszej domenie. Uniemożliwiłoby to na przykład „zatrudnieniu” Internal Revenue Service jako projektanta stron internetowych w ABC Software Inc.
Jakie możliwości wynikają z definiowania relacji w ten sposób? Cóż, Twoja organizacja może potrzebować wiedzieć, dla jakich innych organizacji pracowali Twoi obecni pracownicy i kontrahenci. Pomaga to uniknąć możliwych konfliktów interesów, a nawet oszustw. Przykładem tego jest organizacja nagradzająca. Musi wiedzieć, w jakich szkołach wcześniej uczyli jej asesorzy, aby upewnić się, że nie oceniają prac egzaminacyjnych z tych szkół. W modelu relacji ze stronami łatwo jest wyszukiwać i uzyskiwać te informacje.
Z drugiej strony Twoja organizacja może chcieć przechowywać te same informacje, ponieważ może to przedstawiać możliwości biznesowe. Zależy to tylko od Twojej domeny.
Krótko mówiąc, spostrzeżenia, które można uzyskać z dobrze ustrukturyzowanych danych o relacjach między stronami, mogą być bezcenne.