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

Teil 2 – Wie man ein großes Datenbankdiagramm organisiert

In Teil 1 dieser Serie haben wir erfolgreich die SuiteCRM-Datenbankstruktur in unser Online-Datenbankmodellierungstool importiert. Da haben wir gesehen, dass das Modell 201 Tabellen ohne Beziehungen zwischen ihnen enthält. Wir haben einen wilden Haufen Tische, die wirklich chaotisch aussahen. In diesem Artikel zeige ich Ihnen, wie Sie ein so großes Modell organisieren können.

Unmittelbar nach dem Import in Vertabelo sieht das SuiteCRM-Datenbankmodell wie folgt aus:




Das Modell funktioniert – aber nicht effizient. Wir müssen es ändern, um es wirklich nützlich zu machen. Da wir die SuiteCRM-Datenbank nach analysieren wollen Aktionen auf seiner GUI ausgeführt werden, müssen wir Tabellendefinitionen und die Beziehungen zwischen Tabellen verstehen. Beginnen wir damit, Tabellen in Themenbereiche zu gruppieren und die wichtigsten Beziehungen herzustellen.

Vertabelo bietet drei Hauptwerkzeuge, die Ihnen beim Organisieren großer Diagramme helfen:

  • Themenbereiche
  • Tabellen- und Ansichtsverknüpfungen
  • Referenzverknüpfungen

Ich werde sie später in diesem Artikel beschreiben, aber Sie können auch mehr erfahren, indem Sie sich dieses Video ansehen.

Schritt 1. Deaktivieren Sie die automatische Generierung von Fremdschlüsseln

Zunächst deaktivieren wir die automatische Generierung von Fremdschlüsseln. Standardmäßig generiert Vertabelo Fremdschlüsselattribute, wenn wir Beziehungen von einer Primärtabelle zu einer referenzierten Tabelle ziehen. Das ist normalerweise eine gute Sache, aber nicht hier. Wir haben bereits Attribute, die Fremdschlüssel darstellen. Was uns fehlt, sind „echte“ Beziehungen zwischen Tabellen. Um diese Option zu deaktivieren, klicken Sie auf "Mein Konto" im oberen Menü und finden Sie die "Persönlichen Einstellungen" Abschnitt.

Die Option ist deaktiviert. Wenn wir jetzt eine Referenzlinie zwischen Tabellen ziehen, wird die Linie erstellt – aber wir müssen angeben, welche Attribute sowohl auf der primären als auch auf der fremden Seite verwendet werden.

Schritt 2. Gruppieren Sie vorangestellte Tabellen mit Themenbereichen

Lassen Sie uns als Nächstes einige Tabellen gruppieren. Dazu verwenden wir den Betreffbereich Tool, mit dem Tabellen anhand ausgewählter Kriterien verknüpft werden können. In unserem Fall versuchen wir, Tabellen zu identifizieren, die entweder verwandt oder Teil desselben Prozesses sind. Dies führt zu Gruppen wie "Anrufe", "Meeting" und "Kampagnen".

Wir können einen Themenbereich erstellen, indem wir auf „Neuen Bereich hinzufügen“ klicken Symbol in der Toolbox:

und dann ein Rechteck auf unserem Modell zeichnen:

Der Themenbereich wird erstellt. Wir können es in der "Modellstruktur" sehen Panel auf der linken Seite:

Jeder Themenbereich enthält eine Liste aller Objekte, die sich innerhalb seiner Grenzen befinden; in diesem Fall sind dies Tabellen und Referenztypen.

In SuiteCRM gibt es viele Tabellen, die ein gemeinsames Präfix haben. Also fing ich an, die vorangestellten Tabellen zu gruppieren. Sehen Sie sich als Beispiel die „acl“-Tabellen an. Im Panel „Modellstruktur“ habe ich alle Tabellen gefunden, deren Namen mit „acl_“ beginnen:

Dann habe ich im Modell den Themenbereich „acl“ erstellt und alle passenden Tabellen hineingezogen. (Zur besseren Sichtbarkeit habe ich die Hintergrundfarbe auf lila gesetzt.)

Nun sehen wir unter „Themenbereiche“ die Gruppe „acl“ mit einer Liste aller zugehörigen Tabellen in der "Modellstruktur" :

Ich habe das gleiche Verfahren für alle verbleibenden vorangestellten Tabellen wiederholt.

Schritt 3:Ordnen Sie die restlichen Tische an.

Gleiche Tabelle zweimal im Diagramm? Tabellenverknüpfungen!

Es gibt ungefähr 80 vorangestellte Tabellen. Nachdem ich sie gruppiert hatte, blieben mir ungefähr 120 „wilde“ Tische. Diese sind aussagekräftig:Sie speichern Informationen über Benutzer, Kunden, Anrufe, Besprechungen und andere CRM-Sachen. Das sind eine Menge Informationen, um auf freiem Fuß zu bleiben, also lassen Sie uns diese Tabellen sortieren.

Die Funktion, die ich zum Anordnen dieser Tabellen am nützlichsten fand, heißt Tabellenverknüpfungen . Manchmal möchten Sie dieselbe Tabelle mehr als einmal in einem Modell verwenden. (Warum? Um das Modell zu verflachen und Überlappungen zu vermeiden.) Wir können dies ganz einfach mit "Kopieren" tun und "Als Verknüpfung einfügen" Schaltflächen.

Wählen Sie einfach die Tabelle aus, für die Sie eine Verknüpfung erstellen möchten, und klicken Sie auf "Kopieren" in der oberen Symbolleiste (oder drücken Sie Strg + C ):

Um eine Verknüpfung zu erstellen, klicken Sie auf „Als Verknüpfung einfügen“ (oder drücken Sie Strg + K ). Danach erscheint eine neue Tabelle mit gepunktetem Umriss:

Das ist nicht eine Kopie der Tabelle, aber eine andere Instanz der Originaltabelle. Wir können es überall in unserem Modell platzieren. Ich habe Instanzen derselben Tabelle in verschiedenen Themenbereichen verwendet, um sich überschneidende Referenzen zu vermeiden. Es ist erwähnenswert, dass jede Tabelleninstanz einen zugewiesenen Themenbereichsnamen (neben ihrem Namen) hat, während sie sich innerhalb dieses Themenbereichs befindet.

Ein gutes Beispiel dafür, wie das funktioniert, sind users Tisch. Es ist unter „Benutzer und Konten“, „Rollen“, „Dokumente“ und anderen Themenbereichen zu finden. Wir werden dies später im Modell sehen.

Ich verwende häufig Tabellenverknüpfungen, wenn ich Themenbereiche mit etablierten Beziehungen zwischen Tabellen erstelle. Um zu sehen, wie das funktioniert, sehen Sie sich den unten abgebildeten Themenbereich „Chancen“ an. Beachten Sie, dass alle Tabellen innerhalb dieses Themenbereichs nach dieser Regel benannt werden:{Tabellenname} :{Name des Themenbereichs} .

Wenn wir {Themenbereichsname} erweitern Im Panel „Modellstruktur“ können wir deutlich sehen, dass es Tabellen und Referenzen enthält:

Dies habe ich für folgende Themenbereiche gemacht:„Calls“, „Cases“, „Campaign“, „Contacts“, „Documents“, „Meeting and Leads“, „Eid“, „Projects“, „Prospects and Email Marketing“, „Rollen“ und „Benutzer und Konten“. Alle diese Bereiche haben einen hellblauen Hintergrund.

Die restlichen Tabellen sind nach Namen und vermuteter Bedeutung gruppiert:„E-Mails“, „Benutzer (zusätzlich)“ und „Andere Tabellen“. Diese Gruppen haben eine hellrote Hintergrundfarbe.

Wenn Sie in der Navigationsstruktur auf einen Tabellennamen doppelklicken, zoomt die Ansicht auf diese Tabelle im Modell und wählt sie aus. Wenn Sie durch Drehen des Mausrads hineinzoomen, wird die Ansicht in Richtung des Mauszeigers gezoomt.

Das angeordnete Modell

Ich habe die zuvor beschriebenen Optionen verwendet, um das Modell so weit wie möglich zu verflachen und Tabellen logisch zu gruppieren. Das Ergebnis sind 26 Themenbereiche, von denen einige nur Tabellen enthalten, während andere Tabellen und Relationen haben. Lassen Sie uns einen kurzen Überblick über jede Kategorie geben:

Themenbereiche, die Tabellen und Beziehungen enthalten:

„Anrufe“, „Kampagnen“, „Fälle“, „Kontakte“, „Dokumente“, „Meetings und Leads“, „Chancen“, „Projekte“, „Interessenten und E-Mail-Marketing“, „Rollen“, „Benutzer und Konten“

Alle Beziehungen sind als nicht obligatorisch festgelegt. Dies hält die Information, dass diese Tabellen verwandt sind und über welche Attribute.

Themenbereiche, die nur Tabellen enthalten:

„acl“, „am“, „aod“, „aok“, „aop“, „aor“, „aos“, „aow“, „E-Mails“, „fp“, „jwg“, „oauth“, „security_groups “, „Benutzer extra“

Das bedeutet nicht, dass es hier keine Beziehungen gibt; sie werden einfach nicht hervorgehoben.

Der Themenbereich „Andere Tabellen“ ist für Tabellen, die nicht wirklich in eine bestimmte Gruppe passen.

Wie sieht das Modell aus?

Das neu angeordnete Modell sieht folgendermaßen aus:




Offensichtlich wurde eine Namenskonvention verwendet. Hier ist eine Übersicht über die Richtlinien, die wir befolgt haben:

  1. Tabellennamen stehen meistens im Plural:users , contracts , folders , roles , tasks . Einige Tabellennamen stehen im Singular, z. B. project .
  2. Der Primärschlüssel in den meisten Tabellen heißt einfach id und ist ein char(36)-Typ.
  3. Wenn eine Eins-zu-Viele-Beziehung auftritt, heißt der Fremdschlüssel normalerweise parent_id . (Beispiel:contacts_audit.parent_id ist ein Verweis auf contacts.id .)
  4. In Viele-zu-Viele-Beziehungen wird „parent_id “ kann nicht als Name für mehrere Spalten verwendet werden. Stattdessen wird ein singulärer Tabellenname mit dem Suffix „_id“ verwendet. (Beispiel:contacts_bugs.bug_id ist ein Verweis auf bug.id .)
  5. Es gibt Situationen, in denen dieselbe Spalte als Fremdschlüssel für mehrere Tabellen verwendet wird. (Beispiel:calls.parent_id wird auf die ID-Spalte in jeder der folgenden Tabellen verwiesen:accounts , bugs , cases , contacts , leads , tasks , opportunities and prospects . Ich habe die Werte in der Datenbank nicht überprüft, aber ich vermute, dass es in diesen Tabellen keine gleichen Schlüsselwerte gibt. Da alle vom Typ char(36) sind, wird wahrscheinlich eine Kombination aus Tabellenname und Autoinkrement verwendet. Wir werden das in kommenden Artikeln überprüfen.)
  6. Wir verwenden dieselben Namen für Spalten, die in verschiedenen Tabellen dieselbe Bedeutung haben. (Beispiel:modified_user_id , created_by und assigned_user_id sind in vielen Tabellen im Modell zu finden. Alle werden auf users.id referenziert .)

Was kommt als Nächstes?

In den kommenden Artikeln werden wir die SuiteCRM-GUI verwenden und die Änderungen im Auge behalten, die dies innerhalb der Datenbank bewirkt. Mit diesen Informationen werden wir versuchen, Änderungen am Modell vorzunehmen, Themenbereiche neu zu organisieren und bei Bedarf Verbindungen herzustellen. Außerdem suchen wir nach anderen SuiteCRM-spezifischen Regeln, wie z. B. der Art und Weise, wie Primärschlüssel generiert werden.

Der Umgang mit großen Datenbankdiagrammen ist nie einfach. Wie der Bau eines guten Fundaments für ein Haus wird es später Vorteile bringen, jetzt mehr Zeit für die Grundlagen zu verwenden. Wenn wir Modelle wie das hinter SuiteCRM analysieren wollen, ist die Analyse, bevor wir die Modellstruktur organisiert und Tabellenbeziehungen definiert haben, eine Art Sisyphos.