Database
 sql >> Datenbank >  >> RDS >> Database

Parteibeziehungsmuster. Wie man Beziehungen modelliert

Beziehungen sind überall:zwischen Menschen, zwischen Organisationen, zwischen Organisationen und Menschen. Stellen Sie sich vor, Mitarbeiter eines Unternehmens, Mitglied eines Projektteams oder Tochtergesellschaft eines anderen Unternehmens zu sein. Gibt es eine einfache Möglichkeit, all diese Beziehungen genau zu modellieren und zu verwalten? Können wir die Frage „Wer kennt wen?“ leicht beantworten.

Ein kurzer Überblick über Beziehungen

Wie genau dieses Grundmodell abgeleitet wurde, wurde in meinem vorherigen Artikel Flexible und verwaltbare Stücklisten (BOM)-Designs beschrieben.




In diesem Modell und im konventionellen BOM-Design der 1st interactor tendenziell die überlegene Party in der Relationship – Arbeitgeber statt Arbeitnehmer, Teamleiter statt Teammitglied usw.

So könnten die Daten aussehen (mit der Rolle, die jede Partei in Klammern spielt):


1 Interaktionspartner 2 Interaktionspartner
Widget Co. Inc. (Arbeitgeber) Manager 1 (Mitarbeiter)
Widget Co. Inc. (Arbeitgeber) Manager 2 (Mitarbeiter)
Widget Co. Inc. (Arbeitgeber) Mitarbeiter 1 (Mitarbeiter)
Widget Co. Inc. (Arbeitgeber) Mitarbeiter 2 (Mitarbeiter)
Widget Co. Inc. (Arbeitgeber) Mitarbeiter 3 (Mitarbeiter)
Widget Co. Inc. (Arbeitgeber) Mitarbeiter 4 (Mitarbeiter)
Manager 1 (zuständig für) Mitarbeiter 1 (berichtet an)
Manager 1 (zuständig für) Mitarbeiter 2 (berichtet an)
Manager 2 (zuständig für) Mitarbeiter 3 (berichtet an)
Manager 2 (zuständig für) Mitarbeiter 4 (berichtet an)


Ein ausgefeilteres Modell

Stellen Sie sich vor, Sie möchten ein Projektentwicklungsteam wie folgt modellieren:

Quelle:https://www.edrawsoft.com/template-matrix -org-chart.php

Die meisten Rollen in dieser Teamhierarchie sind real – z. der Anforderungsanalytiker berichtet an den Systemanalytiker. Eine andere Sichtweise ist, dass der Systemanalytiker den Anforderungsanalytiker verwaltet.

Beziehungen zwischen Rollen können von links nach rechts (LTR) oder von rechts nach links (RTL) gelesen werden. Normalerweise ist es am besten, sich an die eine oder andere Konvention zu halten – LTR oder RTL – aber in der Praxis werden Sie vielleicht feststellen, dass es Ausnahmen davon gibt.

Beachten Sie auch, dass dieses Diagramm verschiedene Arten der Gruppierung von Rollen zeigt. Einige Rollen sind real, wie wir besprochen haben; andere sind logisch – z.B. die technische Gruppe, die Schulungsgruppe, das Kernteam und das Support-Team.

Wir können sagen, dass dieses Diagramm die Teamstruktur definiert Verwenden der Rollen, die zum Vervollständigen des Projektentwicklungsteams erforderlich sind. Dies unterscheidet sich von einer tatsächlichen Instanz des Teams, das aus den Namen echter Personen für jede der Rollen bestehen würde.

Wir brauchen also ein Datenmodell, das flexibel und konfigurierbar ist , wie diese hier:




Die gelben Tabellen enthalten Metadaten , und die blauen Tabellen enthalten Geschäftsdaten .

Foundation-Metadaten festlegen

Wir beginnen mit dem Ausfüllen des party_type Tisch. Diese Tabelle unterscheidet, ob eine Partei eine Person oder eine Organisation ist.

Bevor wir viel anderes tun, müssen wir auch Rollen im role_type Metadatentabelle:


Hübscher Name Partytyp
HM Revenue and Customs (HMRC) Organisation
Steuerbehörde (IRS) Organisation
Passservice Organisation
Dasselbe Organisation
Gesellschaft mit beschränkter Haftung Organisation
Gesellschaft mit beschränkter Haftung Organisation
Antragsteller Person
Selbst Person
CTO Engineering Person
Projektmanager Person
Projektspezialist Person
Systemanalytiker Person
Anforderungsanalytiker Person
Technischer Angestellter Person
Systemadministrator Person
Leitender Hardwareingenieur Person
Hardware-Ingenieur Person
Leitender Softwareingenieur Person
Software-Ingenieur Person
Datenbankingenieur Person
Technischer Support Person
QA-Manager Person
Webdesigner Person
Software-QA-Ingenieur Person
Projektbüro Person
Informationssicherheitsingenieur Person
Technisch Organisation
Schulung Organisation
Kernteam Organisation
Support-Team Organisation


Sie haben zweifellos festgestellt, dass jede Rolle entweder einer Person oder einer Organisation gehört. Um eine Vorstellung davon zu geben, was möglich ist, habe ich einige externe Organisationen hinzugefügt, mit denen unsere fiktive Gesellschaft mit beschränkter Haftung, ABC Software Inc, Beziehungen unterhält.

Hinzufügen von Beschäftigungsmetadaten

Die nächste Aufgabe besteht darin, die gültigen Rollenpaare zu definieren zwischen dem ersten und dem zweiten Interaktor. Dies wiederum definiert die Arten von Beziehungen, die Parteien haben können. Beginnen wir mit dem Füllen der role_type_relationship Metadatentabelle mit den Mitarbeiterrollen des Unternehmens. Schließlich können wir keine Teams bilden, ohne zuerst Mitarbeiter zu haben:


1. Rollentyp 2. Rollentyp Beschreibung Richtung Beschreibung Art der Beziehung
Gesellschaft mit beschränkter Haftung CTO-Engineering LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Projektmanager LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Projektspezialist LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Systemanalytiker LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Anforderungsanalytiker LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Technischer Angestellter LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Systemadministrator LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Leitender Hardwareingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Hardware-Ingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Leitender Softwareingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Software-Ingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Datenbankingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Technischer Support LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung QA-Manager LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Webdesigner LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Software-QA-Ingenieur LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Projektbüro LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Ingenieur für Informationssicherheit LTR beschäftigt ECHT
Gesellschaft mit beschränkter Haftung Antragsteller LTR wählt ECHT


Angenommen, ABC Software Inc. stellt zwei Mitarbeiter, Jane Smith und Alex Jones, für die folgenden Rollen ein:


Parteibeziehung Rollentypbeziehung
1. Interaktor (Organisation) Zweiter Interaktor (Person) 1. Interaktor (Rolle) Zweiter Interaktor (Rolle) Beschreibung
ABC Software Inc. Jane Smith Gesellschaft mit beschränkter Haftung CTO-Engineering beschäftigt
ABC Software Inc. Alex Jones Gesellschaft mit beschränkter Haftung Projektmanager beschäftigt


Wenn Sie einen Schritt zurück in die Vergangenheit gehen, würden Sie sehen, dass diese Beziehung begann, bevor Jane Smith und Alex Jones eingestellt wurden; sie mussten sich bei ABC Software Inc. bewerben. Die Beziehung hätte so ausgesehen:


Parteibeziehung Rollentypbeziehung
1. Interaktor (Organisation) Zweiter Interaktor (Person) 1. Interaktor (Rolle) Zweiter Interaktor (Rolle) Beschreibung
ABC Software Inc. Jane Smith Gesellschaft mit beschränkter Haftung Antragsteller wählt
ABC Software Inc. Alex Jones Gesellschaft mit beschränkter Haftung Antragsteller wählt


Fangen Sie an, die Möglichkeiten zu erkennen, die das Parteibeziehungsmuster bietet unterstützt?

Wir haben keine Tabelle namens applicant und eine weitere Tabelle namens employee , wie es auch bei anderen Modellen zu finden ist. Wenn Sie darüber nachdenken, würden sie viele der gleichen Attribute teilen – Name, Adresse, Geburtsdatum usw.; Sie müssten die Werte von applicant an employee bei erfolgreicher Anstellung. Aber haben sich die beteiligten Personen von einer Sache in die andere verwandelt? Natürlich nicht! Es sind immer noch dieselben Leute!

Eigentlich hat sich nur die Beziehung verändert zwischen ABC Software Inc. und Jane Smith oder Alex Jones. Und genau das modelliert das Parteibeziehungsmuster.

Fortsetzung:Projektteam-Metadaten

Bevor wir eine party_relationship Um zu definieren, dass Jane Smith Alex Jones verwaltet, müssen wir die Struktur des Projektentwicklungsteams definieren. Dies ist nur eine Frage der Paarung von übergeordneten und untergeordneten Rollen, um eine gültige Hierarchie zu bilden:


1. Rollentyp 2. Rollentyp Beschreibung Richtung Beschreibung Art der Beziehung
Projektentwicklungsteam CTO-Engineering RTL Leads ECHT
CTO Engineering Projektmanager LTR verwaltet ECHT
Projektmanager Systemanalytiker LTR verwaltet ECHT
Projektmanager Systemadministrator LTR verwaltet ECHT
Projektmanager Projektspezialist LTR verwaltet ECHT
Projektmanager Leitender Softwareingenieur LTR verwaltet ECHT
Projektmanager Technischer Support LTR verwaltet ECHT
Projektmanager Webdesigner LTR verwaltet ECHT
Projektmanager Software-QA-Ingenieur LTR verwaltet ECHT
Projektmanager Projektbüro LTR verwaltet ECHT
Projektmanager Ingenieur für Informationssicherheit LTR verwaltet ECHT
Projektmanager Datenbankingenieur LTR verwaltet ECHT
Projektmanager Technischer Support LTR verwaltet ECHT
Projektmanager QA-Manager LTR verwaltet ECHT
Systemanalytiker Anforderungsanalytiker LTR verwaltet ECHT
Anforderungsanalytiker Technischer Angestellter LTR verwaltet ECHT
Systemadministrator Leitender Hardwareingenieur LTR verwaltet ECHT
Leitender Hardwareingenieur Hardware-Ingenieur LTR verwaltet ECHT
Leitender Softwareingenieur Software-Ingenieur LTR verwaltet ECHT


Für alle oben genannten Rollen wird die Beziehung von links nach rechts gelesen – z. Der Projektmanager verwaltet den Datenbankingenieur. Alternativ können Sie das Format von rechts nach links übernehmen (der Datenbankingenieur berichtet an den Projektmanager), wenn dies Ihre bevorzugte Konvention ist.

Schließlich müssen wir die Beziehung zwischen unseren beiden neuen Mitarbeitern definieren:


Parteibeziehung Rollentypbeziehung
1. Interaktor (Organisation) Zweiter Interaktor (Person) 1. Interaktor (Rolle) Zweiter Interaktor (Rolle) Beschreibung
Jane Smith Alex Jones CTO-Engineering Projektmanager verwaltet


Natürlich können Sie beliebig viele Teams in Form dieser Hierarchie haben. In gewisser Weise also party_relationship ist eine Instanz von role_type_relationship . Dies ähnelt der Art und Weise, wie ein Objekt eine Instanz einer Klasse in der OO-Programmierung ist.

Einschließlich logischer Metadaten

Mit Bezug auf das Diagramm des Projektentwicklungsteams können wir auch die folgenden logischen Beziehungen zwischen Rollen definieren :


1. Rollentyp 2. Rollentyp Beschreibung Richtung Beschreibung Art der Beziehung
Kernteam Projektspezialist RTL ist Mitglied von LOGISCH
Kernteam Systemanalytiker RTL ist Mitglied von LOGISCH
Kernteam Anforderungsanalytiker RTL ist Mitglied von LOGISCH
Kernteam Technischer Angestellter RTL ist Mitglied von LOGISCH
Kernteam Systemadministrator RTL ist Mitglied von LOGISCH
Kernteam Leitender Hardwareingenieur RTL ist Mitglied von LOGISCH
Kernteam Hardware-Ingenieur RTL ist Mitglied von LOGISCH
Kernteam Leitender Softwareingenieur RTL ist Mitglied von LOGISCH
Kernteam Software-Ingenieur RTL ist Mitglied von LOGISCH
Kernteam Datenbankingenieur RTL ist Mitglied von LOGISCH
Kernteam Technischer Support RTL ist Mitglied von LOGISCH
Kernteam QA-Manager RTL ist Mitglied von LOGISCH
Kernteam Webdesigner RTL ist Mitglied von LOGISCH
Kernteam Software-QA-Ingenieur RTL ist Mitglied von LOGISCH
Kernteam Projektbüro RTL ist Mitglied von LOGISCH
Kernteam Ingenieur für Informationssicherheit RTL ist Mitglied von LOGISCH
Support-Team Webdesigner RTL ist Mitglied von LOGISCH
Support-Team Software-QA-Ingenieur RTL ist Mitglied von LOGISCH
Support-Team Projektbüro RTL ist Mitglied von LOGISCH
Support-Team Ingenieur für Informationssicherheit RTL ist Mitglied von LOGISCH


Beachten Sie, dass party_relationship ist nie eine Instanz einer logischen role_type_relationship . Wozu also logische Beziehungen definieren?

Nun, das lässt sich wahrscheinlich am besten anhand eines Beispiels erklären. Stellen Sie sich vor, Sie wollten einen Brief an alle Mitarbeiter schicken, die logischerweise Mitglieder des Support-Teams sind. Um eine Mailingliste zu erstellen, würden Sie eine Abfrage schreiben, die alle Interaktionsrollen des LOGISCHEN Support-Teams 2 zurückgibt, die mit denselben REAL 2-Interaktionsrollen verbunden sind, die mit party_relationship , ist der party . Dies würde es Ihnen ermöglichen, die Namen und Adressen aller Beteiligten zu erhalten.

Ein Sonderfall

Möglicherweise sind Ihnen einige ungewöhnliche Einträge im role_type Metadatentabelle, nämlich:


Rollentyp Partytyp
Selbst Person
Dasselbe Organisation


Dies sind zwei Fälle eines Sonderfalls, der auftritt, wenn eine Partei eine reflexive Beziehung zu sich selbst hat:


1. Rollentyp 2. Rollentyp Beschreibung Richtung Beschreibung Art der Beziehung
Selbst Systemanalytiker LTR angestellt ECHT


Zum Beispiel für einen selbstständigen Systemanalytiker die Interaktionspartner 1 und 2 in party_relationship beziehen sich auf dieselbe party Zeile – d.h. beide Fremdschlüsselspalten enthalten genau die gleiche party.ID Wert.

Die Bedeutung des Kontexts

Stellen Sie sich vor, wir haben ein kleines Analytics-Team, das sich im Grunde aus der Branche zwischen dem Projektleiter und dem technischen Sachbearbeiter bildet:


1. Rollentyp 2. Rollentyp Beschreibung Richtung Beschreibung Art der Beziehung
Kleines Analytics-Team Projektmanager RTL Leads ECHT
Projektmanager Systemanalytiker LTR verwaltet ECHT
Systemanalytiker Anforderungsanalytiker LTR verwaltet ECHT
Anforderungsanalytiker Technischer Angestellter LTR verwaltet ECHT


Jede der Beziehungen hier existiert auch in der Struktur des Projektentwicklungsteams. Wie unterscheiden wir also die Beziehung zwischen Projektmanager → Systemanalytiker?

Wir verwenden den optionalen Kontext Fremdschlüssel zwischen role_type_relationship und role_type . Für das kleine Analyseteam setzen wir den Kontext aller Beziehungen zum „kleinen Analyseteam“, dem Element der obersten Ebene. Und wir tun dasselbe für die Struktur des Projektentwicklungsteams. Wenn wir die Struktur durchqueren, tun wir dies nur für den Teamtyp, an dem wir interessiert sind.

Vor- und Nachteile von Stücklistenmustern für Parteienbeziehungen

Wenn Sie meine anderen Artikel zu diesem Thema gelesen haben, haben Sie wahrscheinlich erraten, dass ich ein Fan des Bill of Materials-Designmusters bin. Es ist einfach, aber sehr mächtig. Der Vorbehalt ist, dass es angemessen verwendet und so angepasst werden muss, dass Ihre Implementierung überschaubar bleibt.

Bei dieser Parteibeziehungsimplementierung des BOM-Musters stellen wir sicher, dass unsere Beziehungen korrekt bleiben, indem wir zunächst die zulässigen Beziehungen zwischen den in unserer Domäne vorhandenen Interaktoren definieren. Dies würde beispielsweise verhindern, dass der Internal Revenue Service als Webdesigner bei ABC Software Inc. „angestellt“ wird.

Welche Möglichkeiten ergeben sich aus dieser Art der Beziehungsdefinition? Nun, Ihre Organisation muss möglicherweise wissen, für welche anderen Organisationen Ihre derzeitigen Mitarbeiter und Auftragnehmer gearbeitet haben. Dies trägt dazu bei, mögliche Interessenkonflikte oder sogar Betrug zu vermeiden. Ein Beispiel hierfür ist eine Vergabeorganisation. Es muss wissen, an welchen Schulen seine Prüfer zuvor unterrichtet haben, um sicherzustellen, dass sie keine Prüfungsunterlagen dieser Schulen bewerten. In einem Parteienbeziehungsmodell ist es einfach, diese Informationen abzufragen und zu erhalten.

Andererseits möchte Ihre Organisation möglicherweise dieselben Informationen speichern, weil sie Geschäftsmöglichkeiten bieten könnten. Es hängt nur von Ihrer Domain ab.

Kurz gesagt, die Erkenntnisse, die Sie aus gut strukturierten Beziehungsdaten gewinnen können, können von unschätzbarem Wert sein.