Gibt es eine kostenlose Datenmodellierungssoftware, die das Schema in ein anderes maschinenlesbares Format als SQL exportiert?

Ich bin dabei, die offenen Daten meines Landes und die Beziehungen zwischen ihnen abzubilden, und ich muss dies sowohl in menschen- als auch in maschinenlesbaren Formaten tun.

Ich schaue mir Diagrammtools für den von Menschen lesbaren Teil an, aber ich würde das Tool benötigen, um die Ergebnisse in ein anderes maschinenlesbares Format als SQL exportieren zu können, z. B. json oder xml, um es an a weitergeben zu können selbst geschriebenes Programm zur späteren Bearbeitung.

Da ich nicht auf SQL angewiesen sein müsste, möchte ich, dass möglichst viele der UML-Beziehungstypen unterstützt werden. Ich könnte mich aber mit Assoziation, reflexiver Assoziation (Selbstreferenz) und Multiplizität begnügen.

Gibt es ein kostenloses Tool, das dies erreichen kann?

PS: Wenn nicht, gibt es Python- oder C#-Bibliotheken, die SQL-DDL-Anweisungen in eine Klassenstruktur einlesen können?

Welche Ausdruckskraft brauchen Sie? Zum Beispiel Richtungsbeziehungen, Multiplizität etc. Vielleicht sogar Vererbung? (was die meisten SQL-Modellierungstools nicht können)
An welche(s) Programm(e) würden Sie die Daten weitergeben? Und haben Sie ein bestimmtes Betriebssystem / SQL-Dialekt im Sinn?
@NicolasRaoul Ich habe meine Frage aktualisiert
@Mawg Das Programm wäre wahrscheinlich ein Skript, das ich selbst geschrieben habe. Betriebssystem wäre entweder Windows oder Mac OS. Ich hatte keinen bestimmten SQL-Dialekt im Sinn, aber vielleicht wären diejenigen mit verfügbaren Parser-Bibliotheken am besten. Habe noch nicht nachgeschaut welche das sind.
Was nennen Sie „reflektierende Assoziation“? bidirektionale Assoziation?
@NicolasRaoul nein, ich meine Selbstreferenz.

Antworten (2)

SQL Power Architect speichert seine Definition als XML-Datei. Allerdings finde ich dieses Format ziemlich schwer zu verwenden von zB XSLT.

Aber es unterstützt auch das XML-Format von Liquibase für "Forward Engineering", das einfacher zu verarbeiten ist als das Format, das Power Architect verwendet (zumindest meiner Meinung nach).

Mir ist noch etwas unklar. Könnten Sie Python nicht verwenden, um die Datenbank abzufragen und dieses Ergebnis zum Generieren von XML verwenden?

Ah, "die offenen Daten meines Landes und die Beziehungen zwischen ihnen". Also nicht unbedingt alle Daten, sondern zum Beispiel die Beziehungen zwischen Tabellen?

Wenn Sie Zugriff auf die Metadaten (Schema) haben. Wenn Sie das tun, sollte dies nicht schwierig sein. Wenn Sie dies nicht tun, können Sie SQL-Abfragen verklagen, oder sind Sie darauf beschränkt, nur Daten in einem Format zu erhalten, das sie (irgendeine Regierungswebsite) Ihnen anbieten möchten?

Zur Verdeutlichung: Um Beziehungen zwischen Daten zu ermitteln, suchen Sie am besten nach Fremdschlüsseln .

Sie können diese aus dem Datenbankschema abrufen. Oder zum Beispiel durch Ausführen des MySql- SHOW CREATE TABLEBefehls.

Diese ausgezeichnete Antwort zeigt

Für eine Tabelle:

SELECT 
  TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = '<database>' AND
  REFERENCED_TABLE_NAME = '<table>';

Für eine Spalte:

SELECT 
  TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = '<database>' AND
  REFERENCED_COLUMN_NAME = '<column>';

Natürlich ist es wahrscheinlich so, dass Sie keinen direkten Zugriff auf die eigentliche Datenbank haben, sondern nur eine API, die die Abfragen für Sie übernimmt.

Da sehe ich zwei Möglichkeiten:

1) Wenden Sie sich an denjenigen, der die Daten bereitstellt. Wenn sie es frei verfügbar machen, werden sie wahrscheinlich nicht nur bereit, sondern sogar erfreut sein, Ihnen zu helfen. Wenn Sie wirklich Glück haben, erhalten Sie vollen Lesezugriff und können Tools wie MySql Workbench verwenden , die Ihnen helfen können, eine vorhandene Datenbank zurückzuentwickeln und sie so zu visualisieren

http://download.nust.na/pub6/mysql/tech-resources/articles/workbench-screenshot.png (Entschuldigung, mein Browser spielt ab und fügt das Bild nicht ein)

2) Dump jeden Tisch. Es wird nicht so dargestellt, aber Sie erhalten wahrscheinlich das Ergebnis von `SELECT * From ' und suchen per Hand oder per Code nach identisch benannten Spalten.

Bei einem guten Datenbankdesign werden sinnvoll benannte Spalten mit demselben Spaltennamen in mehreren Spalten verwendet. Bsp customer_id, order_idusw

Und mit gutem Datenbankdesign/viel Glück haben sie die Form <table_name¬_Id, oder <table_name>_index, oder ähnlich.

Daraus können Sie schließen, dass dies customer_idder PRIMARY KEY in der customersTabelle ist und in der Tabelle als FOREIGN KEY verwendet wird orders, wodurch Ihre Beziehung hergestellt wird.

Ich werde Ihren Vorschlag versuchen, die Anbieter zu kontaktieren, aber da ich ein wenig über die Hintergründe weiß, bezweifle ich, dass wir viel davon haben werden. Darüber hinaus gibt es mehr als tausend Datenquellen, einschließlich lokaler und föderaler Regierungsinstitutionen. Die Open-Data-Initiative unseres Landes steckt noch in den Kinderschuhen und ist dabei, alles zu standardisieren. Daran wollen wir uns beteiligen. Außerdem wollen wir Beziehungen zwischen verschiedenen Datenquellen herstellen, daher wird in diesem Fall eine direkte Verbindung zu den Datenbanken nicht sehr hilfreich sein, wenn wir überhaupt dazu kommen.
Es gibt einige Schlüssel, um Daten aus verschiedenen Quellen in Beziehung zu setzen, aber sie werden nicht durch eine einzelne relationale Datenbank mit Fremdschlüsselbeschränkungen erzwungen, sondern durch einen herrschenden Standard. So wie es aussieht, glaube ich, dass die Aufgabe, die Daten und die Beziehungen abzubilden, manuell sein muss.
Dann denke ich, dass du hier kaum eine Antwort auf deine Lösung bekommen wirst. Können Sie eine weitere Frage stellen, die Ihnen hilft, Tools zu erhalten, die Ihnen bei Ihrer Aufgabe helfen? Ich interessiere mich sehr für die Idee. Werden Sie dokumentieren, was Sie irgendwo tun?