Skip to content

Datenbank aus XML oder JSON erzeugen ​

Werkzeuge → Datenbank aus XML / JSON erstellen nimmt ein XML- oder JSON-Dokument, ermittelt die darin verborgene relationale Struktur und baut daraus eine Datenbank — Tabellen, Spalten, Typen, Beziehungen und Daten.

Das ist für den Fall gedacht, dass ein System Ihnen einen großen Export übergibt — einen Produktkatalog, einen medizinischen oder pharmazeutischen Datensatz, einen API-Dump, die Datei eines Partners — und Sie das als echte Datenbank haben wollen statt als Datei.

Vier Formate werden angenommen: .xml, .json sowie zeilenweises JSON als .jsonl oder .ndjson. Das Format ergibt sich aus der Dateiendung; alles nach der ersten Analyse ist gemeinsam, Vorschau, erzeugtes DDL und Ladevorgang verhalten sich also gleich, womit Sie auch begonnen haben.

Die drei Schritte ​

1. Einrichten ​

  • XML-/JSON-Datei — Dokument auswählen.
  • Zielverbindung — wo die Datenbank angelegt wird.
  • Zieldatenbank — der Datenbankname. Bei SQLite ist das die Datenbankdatei der Verbindung.

2. Vorschau ​

NabuSQL analysiert das Dokument und zeigt, was es gefunden hat: die Tabellen, die es anlegen wird, deren Spalten und die abgeleiteten Typen. Das erzeugte DDL lässt sich prüfen, bevor irgendetwas läuft.

Lesen Sie diesen Schritt genau. Hier erfahren Sie, dass ein Feld, das Sie numerisch erwartet hatten, als Text abgeleitet wurde, weil ein Datensatz von fünfzigtausend ein verirrtes Zeichen enthält.

3. Ausführen ​

Der Import läuft mit Fortschritt je Tabelle. Am Ende erhalten Sie ein Ergebnis je Tabelle: geladene Zeilen und etwaige Fehler.

Wie die Struktur abgeleitet wird ​

Aus XML ​

Wiederholte Elemente werden zu Tabellen. Attribute und Elementtext werden zu Spalten. Ein Element, das innerhalb seines Elternelements nur einmal vorkommt, wird als Spalten mit Präfix in das Elternelement eingefaltet — aus <meta><author>…</author></meta> wird eine Spalte meta_author und keine eigene Tabelle mit einer Zeile.

Aus JSON ​

Dieselbe Idee, im Vokabular von JSON:

Im DokumentIn der Datenbank
Schlüssel mit einem SkalarSpalte auf der Tabelle dieses Objekts
Schlüssel mit einem ObjektAls Spalten mit Präfix ins Elternelement eingefaltet
Schlüssel mit einem ArrayUntertabelle mit Fremdschlüssel auf das Elternelement
Nacktes Skalar in einem ArrayDie Spalte _text dieser Tabelle

Eines sagt JSON deutlicher, als XML es kann: Ein Array bedeutet „viele" auch dann, wenn diese eine Datei nur ein Element enthält — es wird also unabhängig von der Länge zur Tabelle. XML muss dasselbe aus einem sich wiederholenden Tag ableiten, weshalb ein einmaliges Kindelement genauso aussieht wie eine Sammlung, die zufällig ein Mitglied hat.

Ein Array auf oberster Ebene gilt als Liste von Wurzeldatensätzen. Ein Objekt auf oberster Ebene ist ein einzelner Wurzeldatensatz. Bei .jsonl / .ndjson ist jede Zeile ein Wurzeldatensatz, leere Zeilen werden übersprungen.

Da JSON kein Wurzel-Tag hat, nach dem sich etwas benennen ließe, liefert der Dateiname den Namen der Wurzeltabelle — catalog.json ergibt eine Tabelle catalog.

Wie es arbeitet ​

Drei Punkte der Umsetzung haben praktische Folgen:

  • Analyse in zwei Durchgängen. Der erste ermittelt die Struktur, der zweite lädt die Daten.
  • Speicher. XML und zeilenweises JSON werden gestreamt, die Dateigröße ist also durch die Festplatte begrenzt und nicht durch den Arbeitsspeicher. Eine gewöhnliche .json-Datei ist ein einziger JSON-Wert und muss vollständig eingelesen werden, eine sehr große ist damit durch den Speicher begrenzt. Wenn Sie den Export steuern, verlangen Sie .ndjson.
  • Fremdschlüssel werden nach dem Laden gesetzt. Datensätze sind häufig so sortiert, dass ein Kind vor seinem Elternteil ankommt; die Constraints vorab anzulegen würde völlig korrekte Zeilen zurückweisen. Sie kommen am Ende dazu, wenn jede Zeile an ihrem Platz ist.

Danach ​

  • Prüfen Sie die abgeleiteten Typen unter Tabellen und Spalten und engen Sie ein, was breiter ausgefallen ist als nötig.
  • Öffnen Sie das ER-Diagramm, um die abgeleitete Struktur zu sehen.
  • Legen Sie Indizes für die Spalten an, die Sie wirklich abfragen — der Import erzeugt Schlüssel und Constraints, nicht die Indizes, die Ihre Auswertungen brauchen.

Wenn eine Tabelle falsch herauskommt ​

Die Struktur folgt dem Dokument. Ist ein Feld über die Datensätze hinweg uneinheitlich, weitet die Analyse den Typ so weit, dass er jeden gesehenen Wert aufnimmt. Das nach dem Laden zu korrigieren — ein ALTER TABLE auf einem inzwischen bekannten Datenbestand — geht meist schneller, als die Quelldatei umzubauen.

Boolesche Werte überraschen oft: JSON-true / false werden als 1 / 0 gespeichert, die Spalte kommt also ganzzahlig heraus und nicht als Text.