database-diagramming

___ qstnhdr ___ Tools zum Erkennen von De-facto-Fremdschlüsseln in Datenbanken? [geschlossen] ___ answer7142967 ___

Interessante Frage. Sie möchten ein Datenbankschema und Daten analysieren, um festzustellen, welche Tabellen relevant sind oder miteinander in Beziehung stehen sollten, ohne dass eine strikte Definition der Beziehung erforderlich ist. In der Tat versuchen Sie, eine Beziehung abzuleiten.

Ich sehe zwei Möglichkeiten, wie Sie auf eine solche Beziehung schließen können. Lassen Sie mich zunächst sagen, dass Ihr Ansatz abhängig von den Datenbanken, mit denen Sie arbeiten, variieren kann. Eine Reihe von Fragen fällt mir ein (ich will keine Antworten, aber sie sind es wert, darüber nachzudenken)

  • sind diese unternehmensinternen Systeme, die einigen konsistenten Namenskonventionen oder Mustern folgen?
  • oder sind sie "in-the-wild" -Datenbanken, auf die Sie jederzeit und überall stoßen?
  • Welche Art von Annahmen sind Sie bereit zu machen?
  • würden Sie es bevorzugen, mehr falsche positive oder falsche negative Ergebnisse in Ihrem Ergebnis zu bekommen?

Beachten Sie, dass diese Schlussfolgerung mit ziemlicher Sicherheit falsche Ergebnisse liefert und auf einer Reihe von Annahmen beruht.

Also biete ich zwei Ansätze an, die ich im Konzert verwenden würde.

Übertragung einer Beziehung durch Struktur / Benennung (symbolische Analyse)

Der allgemeine Datenbankentwurf besteht darin, eine PK-Spalte nach dem Tabellennamen zu benennen (z. B. %code% in Tabelle %code% ) oder alternativ die PK-Spalte einfach mit %code% zu benennen.

Eine Tabelle mit einer FK-Beziehung zu einer anderen benennt die zugehörige Spalte oft genauso wie die zugehörige Tabelle. In der Tabelle %code% würde ich eine Spalte %code% erwarten, die sich auf die Spalte %code% / %code% in der Tabelle %code% bezieht.

Diese Art der Analyse würde

beinhalten
  • Überprüfung von Spalten in Tabellen auf ähnliche Ausdrücke / Wörter
  • sucht nach Spaltennamen, die den Namen anderer Tabellen ähnlich sind
  • Prüfung auf Spaltennamen, die den Namen einer anderen Spalte enthalten (z. B. %code% & amp; %code% beziehen sich beide auf die Spalte %code% in der Tabelle %code% )

Übertragung einer Beziehung durch Daten (statistische Analyse)

Wenn Sie Daten betrachten, wie Sie es in Ihren Kommentaren vorgeschlagen haben, können Sie "mögliche" Referenzen ermitteln. Wenn die Spalte %code% in der Tabelle %code% Werte enthält, die nicht in der Spalte %code% der Tabelle %code% vorhanden sind, dann ist es sinnvoll zu bezweifeln, dass dies eine gültige Beziehung ist (obwohl Sie es nie wissen!)

Eine einfache Form der Datenanalyse verwendet Daten und Zeiten. Zeilen, die in enger Nachbarschaft zueinander erstellt wurden, sind eher miteinander verwandt. Wenn für jede %code% -Zeile, die erstellt wurde, auch zwischen 2 und 5 %code% -Zeilen vorhanden sind, die innerhalb weniger Sekunden erstellt wurden, ist wahrscheinlich eine Beziehung zwischen beiden gegeben.

Eine detailliertere Analyse könnte sich den Bereich und die Verteilung der verwendeten Werte ansehen.

Beispiel: Wenn Ihre %code% -Tabelle eine %code% -Spalte hat, könnten Sie aus der symbolischen Analyse schließen, dass sich die Spalte wahrscheinlich auf eine %code% -Tabelle oder eine %code% -Tabelle bezieht. Die Spalte %code% hat 6 diskrete Werte und 90% der Datensätze werden durch 2 Werte abgedeckt. Die Tabelle %code% hat 200 Zeilen und die Tabelle %code% hat 9 Zeilen. Sie können folgern, dass sich die %code% -Spalte auf die %code% -Tabelle bezieht - sie gibt eine größere Abdeckung der Zeilen der Tabelle (2/3 der Zeilen werden "verwendet", während nur 3% der Zeilen verwendet werden) in der Tabelle %code% würde verwendet werden).

Wenn Sie Datenanalysen an vorhandenen Datenbanken durchführen, um "reale Daten" zu sammeln, würde ich einige Muster erwarten, die als Anhaltspunkte für die Strukturschlussfolgerung dienen könnten. Wenn eine Tabelle mit einer großen Anzahl von Datensätzen eine Spalte mit einer kleinen Anzahl von Werten aufweist, die mehrmals wiederholt werden (nicht unbedingt in der richtigen Reihenfolge), bezieht sich diese Spalte eher auf eine Tabelle mit einer entsprechend kleinen Anzahl von Zeilen.

Zusammenfassung

Viel Glück. Es ist ein interessiertes Problem, ich habe gerade einige Ideen rausgeschmissen, aber das ist sehr viel ein Versuch & amp; Fehler, Datenerfassung und Performance Tuning Situation.

    
___ tag123foreignkeys ___ Ein Fremdschlüssel ist eine Spalte oder eine Kombination von Spalten in einer relationalen Tabelle, die einem Kandidatenschlüssel einer anderen Tabelle entspricht. Der Fremdschlüssel kann zum Querverweisen von Tabellen verwendet werden. ___ answer7137767 ___

Ich weiß nicht über die Software, die bei der Suche helfen kann, was Sie benötigen, aber die folgende Abfrage hilft Ihnen beim Einstieg. Es listet alle Fremdschlüsselbeziehungen innerhalb der aktuellen Datenbank auf.

%Vor%

Hoffe, das hilft.

    
___ answer32696151 ___

Die folgenden Produkte behaupten alle, Erkennungsfähigkeiten für Fremdschlüssel bereitzustellen:

ERwin Ссылка

Informatica Ссылка

und XCaseForI Ссылка

Statistische Methoden, die in der Lage sind, eine Art Ähnlichkeit zu bieten, rangieren nach der von Kirk vorgeschlagenen Verteilungs- und Erstellungszeit. scheint der richtige Weg zu sein.  .. Ich müsste es mit SAS EG oder einem kostenlosen Tool implementieren.

    
___ tag123databasedigramming ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Eine gute Möglichkeit, die Informationen in einer Datenbank schnell zu erfassen, besteht darin, ein Werkzeug anzuwenden, das automatisch ein Datenbankdiagramm aller Tabellen und aller Beziehungen zwischen ihnen erstellt.

Meiner Erfahrung nach verwenden solche Tools Fremdschlüssel als Beziehungen, die die meisten Datenbanken, die ich versuche, nicht enthalten. Sicher, sie erfüllen Einschränkungen, die Fremdschlüsseln entsprechen, setzen sie jedoch nicht durch. Und ich werde am Ende ein "Diagramm" haben, das aus einer Reihe von nicht zusammenhängenden Tabellen besteht.

Nach was ich suche, ist Software, die "undeclared Fremdschlüssel" und entweder

berechnen kann
  • verwendet sie als Tabellenrelationen in einem Datenbankdiagramm oder
  • generiert SQL-Code für entsprechende Fremdschlüsseldeklarationen

Kennst du irgendwelche Werkzeuge, die wenn möglich frei sind, die das schon tun können?

    
___ tag123foreignkeyrelationship ___ Ein Fremdschlüssel ist eine Spalte oder eine Kombination von Spalten in einer relationalen Tabelle, die einem Kandidatenschlüssel einer anderen Tabelle entspricht. Der Fremdschlüssel kann zum Querverweisen von Tabellen verwendet werden. ___ tag123databasediagramm ___ hilf uns dieses Wiki zu bearbeiten ___ answer25568088 ___

Dies ist in den meisten Fällen eine nicht-triviale Übung. Wenn Sie das Glück haben, ein Schema für ein modernes Framework wie Ruby on Rails oder CakePHP o.ä. zu analysieren, und die Entwickler streng darauf geachtet haben, den Spaltenkonventionen zu folgen, haben Sie eine gute Chance, viele, aber nicht alle zu finden , der impliziten Beziehungen.

i.e. Wenn Ihre Tabellen Spalten wie %code% verwenden, um auf Einträge in den Tabellen %code% zu verweisen.

Seien Sie sich bewusst : Einige Entitätsnamen können plural unregelmäßig sein ( %code% ist ein gutes Beispiel: %code% , nicht %code% ) und diese sind schwerer zu fangen (aber immer noch möglich). Schlüssel wie %code% , mit denen die Entwickler der Tabelle users auf %code% beitreten, können jedoch nicht abgeleitet werden. Sie müssten diese Fälle manuell behandeln.

Sie haben kein RDBMS angegeben, aber ich habe MySQL sehr oft verwendet und arbeite gerade an diesem Problem für mich.

Das folgende MySQL-Skript wird die meisten Beziehungen ableiten, die durch Spaltennamen impliziert werden. Es listet dann alle Beziehungen auf, für die es Tabellennamen nicht finden konnte, so dass Sie zumindest wissen, welche Ihnen fehlen. Die abgeleiteten Eltern und Kinder werden zusammen mit den Singular- und Pluralnamen sowie der implizierten Beziehung aufgelistet:

%Vor%

Dies wird Ergebnisse wie folgt zurückgeben:

Dann können Sie alle Namenskonvention-Ausnahmen überprüfen, die mit:

erkannt wurden %Vor%

Dies liefert Ergebnisse wie diese, die Sie manuell bearbeiten können:

Sie können diese Skripts so ändern, dass sie das ausspucken, was für Sie nützlich ist. Wenn Sie möchten, fügen Sie auch Anweisungen zum Erstellen von Fremdschlüsseln hinzu. Hier ist die letzte Spalte eine einfache "hat viele" -Beziehungsanweisung. Ich benutze dies in einem Werkzeug namens Pidgin, genannt Pidgin, das ein schnelles Modellierungstool ist, das Beziehungsdiagramme auf der Grundlage von Beziehungsanweisungen zeichnet, die in einer sehr einfachen Syntax geschrieben sind (genannt 'Pidgin'). Sie können es auf Ссылка

ausprobieren

Ich habe das obige Skript in einer Demo-DB ausgeführt, um Ihnen die Art von Ergebnissen zu zeigen, die Sie erwarten können:

Ich habe den irregulären Plural in meinem Drehbuch nicht berücksichtigt, aber ich könnte mich auch darum bemühen, zumindest für den Fall von Entitäten, die auf -y enden. Wenn Sie das selbst ausprobieren möchten, würde ich empfehlen, eine gespeicherte Funktion zu schreiben, die %code% Spaltennamen als Parameter akzeptiert, den %code% -Teil entfernt und dann einige Heuristiken anwendet, um zu versuchen, die Pluralisierung korrekt durchzuführen.

Ich hoffe, das ist nützlich!

    
___
4
Antworten

Tools zum Erkennen von De-facto-Fremdschlüsseln in Datenbanken? [geschlossen]

Eine gute Möglichkeit, die Informationen in einer Datenbank schnell zu erfassen, besteht darin, ein Werkzeug anzuwenden, das automatisch ein Datenbankdiagramm aller Tabellen und aller Beziehungen zwischen ihnen erstellt. Meiner Erfahrung nach...
11.08.2011, 18:48