
In diesem Beitrag werde ich über ein Tool sprechen, mit dem Sie schnell Zeilen in einer Datenbank finden und durch diese navigieren können. Wenn Sie im Support arbeiten und viele Datenbankabfragen durchführen müssen, wenn Sie es leid sind, SELECTs zu schreiben, klicken Sie bitte unter cat.
Motivation
Vor einiger Zeit half ich, ein großes Buchhaltungssystem aufrechtzuerhalten. Im Laufe der Arbeit musste nach Informationen in der Datenbank gesucht werden. Typisches Szenario: Ein Benutzer mit einem Problem ruft auf Anfrage N1 an. Für die Diagnose müssen Sie einige Daten zu dieser Anwendung in der Datenbank anzeigen. Wir erfüllen den Wunsch:
SQL SELECT * FROM ORDER WHERE ID = 'N1'
Das Gerät ist der Anwendung zugeordnet. Daher führen wir die folgende Anforderung aus, um Informationen zum Gerät zu erhalten:
SQL SELECT * FROM DEVICE WHERE ORDER_ID = 'N1'
Dann suchen wir nach allen Anwendungen, die sich auf das Gerät beziehen:
SQL SELECT * FROM ORDERS WHERE DEVICEID = '92375'
Usw. Nach der Ausführung von N Abfragen werden wir früher oder später ein Problem in den Daten finden und Maßnahmen ergreifen. Die Nachteile dieses Ansatzes liegen auf der Hand:
- Das manuelle Schreiben von Abfragen ist langsam und unpraktisch. Besonders wenn die Datenbankstruktur komplex ist und es viele Tabellen gibt. So ist es möglich, das Tunnelsyndrom zu modifizieren.
- Wenn Sie eine verwandte Zeile anhand einer eindeutigen Einschränkung oder eines Fremdschlüssels suchen müssen, müssen Sie eine neue Abfrage schreiben.
- In der Regel zeigen Datenbank-Tools Daten in Tabellenform an. Wenn die Tabelle viele Spalten enthält, müssen Sie horizontal durch die Tabelle scrollen oder Spalten in der Abfrage auswählen. Auch hier ist Handarbeit erforderlich.
Idee
Zuerst müssen Sie die Suche vereinfachen. Diese Aktion sollte mit einem Minimum an Klicks ausgeführt werden. Geben Sie einfach die gewünschte Zeile in das Textfeld ein und drücken Sie die Eingabetaste. Primärschlüssel werden normalerweise indiziert, sodass Sie in allen Spalten, die in Primärschlüssel oder eindeutigen Einschränkungen enthalten sind, sofort nach einem Wert suchen können.
Dann müssen Sie das Navigationsproblem lösen. Wie kann man schnell zu einem verwandten Eintrag auf einem Fremdschlüssel springen? Sie können sich eine Datenbank als Dateisystem vorstellen: Stellen Sie sich vor, eine Datenbankzeile ist ein Verzeichnis, eine verwandte Zeile nach Fremdschlüssel ist ein Symlink und ein Feld, das kein Fremdschlüssel ist, ist eine einfache Datei. Ich werde keinen Dateisystemtreiber schreiben, es ist nur eine Analogie. So können Datenbankzeilen als hierarchische Struktur dargestellt werden, die mit der TreeTable-Komponente angezeigt werden kann.
Sie können der TreeTable-Komponente auch eine Spalte hinzufügen, in der ein aussagekräftiger Wert für eine bestimmte Zeile angezeigt wird. Dieser Wert kann durch Verketten der Werte der Datenbankzeilenfelder erhalten werden. Beispielsweise können Sie für eine Bestellposition einen Ausdruck erstellen:
ORDER_NAME + ', ' + ORDER_STATUS + ', ' + ORDER_CUSTOMER
Nächste Analogie: toString () -Methode in Java.
Implementierung
Die Programmierung dauerte viele Monate. Zuerst habe ich versucht, C ++ und Qt zu verwenden, aber es stellte sich als schwierig heraus: In der C ++ - Welt gibt es nichts, was jdbc-Treibern ähnelt, und die Sprache selbst ist viel komplizierter. Daher ist die Anwendung in Java geschrieben.

Im Screenshot sehen wir das Suchfeld, das Kombinationsfeld zum Umschalten der aktuellen Verbindung und die TreeTable-Komponente, die hierarchische Daten anzeigt.
Suche
Sie können eine Zeichenfolge in das Textfeld eingeben und die Eingabetaste drücken. Die Suche funktioniert jetzt nur für Spalten mit Zeichenfolgen und numerischen Typen: VARCHAR, NUMBER usw. Datums- und Zeittypen werden noch nicht unterstützt. Standardmäßig sucht das Tool nach Werten in den Spalten, die im Primärschlüssel enthalten sind. In den Einstellungen können Sie die anderen Felder ankreuzen, die bei der Suche verwendet werden.
Tastennavigation
Die mit [F] gekennzeichneten Knoten sind der Fremdschlüssel. In der Tabellenspalte sehen wir den Namen der Tabelle, auf die sich dieser Schlüssel bezieht. Nachdem wir den Knoten geöffnet haben, fahren wir mit der entsprechenden Zeile fort. Zusammengesetzte Fremdschlüssel werden ebenfalls unterstützt.
Die mit [U] gekennzeichneten Knoten sind Unique Constraint oder Primary Key. Nachdem Sie den Knoten erweitert haben, können Sie zu den zugehörigen Zeilen wechseln. Schauen Sie sich den Screenshot an:

Wir haben den Wert 10248 in die Suchleiste eingegeben und eine Zeile in der Tabelle ORDERS gefunden. Wir haben den Knoten [U] ORDER_ID geöffnet und 3 Zeilen in der Tabelle ORDER_DETAILS gefunden. Anschließend können Sie jeden Knoten erweitern und zu den Zeilen der Tabelle ORDER_DETAILS wechseln.
Column String
Primärschlüsselwerte sind häufig nicht informativ. Im vorherigen Screenshot sehen wir die Werte ORDER_ID = 10248, PRODUCT_ID = 11. Diese Zahlen sagen nichts aus. Um sie irgendwie zu humanisieren, kannst du einen Ausdruck machen:
'Product: ' + PRODUCT_ID.PRODUCT_NAME + ', Price: ' + UNIT_PRICE
und geben Sie es in die Zelle der Spalte "Zeichenfolge" ein:

Drücken Sie die Eingabetaste, um aussagekräftigere Werte anzuzeigen:

Technische Details
Die Anwendung ist in Java geschrieben, eine Schnittstelle in JavaFX. Möglicherweise stellen Sie fest, dass in der TreeTable die Zeichenfolgen "[U]" und "[F]" anstelle von
Symbolen verwendet werden . Dies liegt an diesem nervigen Fehler:
JDK-8190331 . Datenbankkennwörter werden mithilfe der
Java-Schlüsselringbibliothek in einem sicheren Repository gespeichert. OpenJDK 13 und Build-
J -
Paket mit frühem Zugriff
werden zum Erstellen von
Installationsprogrammen verwendet . Build-Befehle finden Sie
hier .
Oracle-, MariaDB- und PostgreSQL-Datenbanken werden jetzt unterstützt.
Referenzen
Projektseite auf github:
db-tree-fxWenn Sie einen Fehler finden oder etwas hinzufügen müssen, können Sie das Problem starten oder direkt an die E-Mail schreiben:
db.tree.app@gmail.com .
Installationspakete
RPM für GNU / Linux:
db-tree-0.0.2-1.x86_64.rpmDeb für GNU / Linux:
db-tree_0.0.2-1_amd64.debSigniertes dmg für macOS:
db-tree-0.0.2.dmgSignierte msi für Windows:
db-tree-0.0.2.msi
Die neueste Version ist auf
Github zu finden