Ich habe an einem neuen Feature der sQLshell gearbeitet, das die manuelle Dateiengabe extrem vereinfacht.
Dabei wollte ich das Problem adressieren, das bei der manuellen Eingabe von Daten in ein Datenmodell entsteht, das referentielle Integrität über Fremdschlüsselbeziehungen sicherstellt:
Daten werden in so einem Modell meist eingegeben, indem Datensätze in verschiedenen Tabellen hinzugefügt werden, die die Schlüssel der neuen Datensätze in anderen Tabellen benötigen, um sie korrekt in die Fremdschlüsselspalten einzufügen. Das ist noch einfach - wenn auch mühsam - wenn diese Schlüssel nicht automatisch gefüllt, sondern explizit spezifiziert werden. Schwierig wird es aber, wenn es sich um Autoincrement-Spalten handelt oder die Werte der Schlüsselspalten auf andere Art und Weise im Datenbankmanagementsystem erzeugt werden - etwa über Formeln (Beispiel: Benutzung von NOW() zur Erzeugung der Werte für Timestamp-Spalten).
Daher hat die sQLshell nun einen Mechanismus, sich an die Werte (alle - sowohl die explizit angegebenen, wie auch die generierten) der letzten neu hinzugefügten Zeile einer jeden Tabelle zu erinnern und diese Werteentsprechend vorzuschlagen, wo es passt: Damit ist zum Beispiel der Dialog zum Einfügen einer neuen Zeile in eine Tabelle, die Fremdschlüssel von anderen importiert, nicht mehr komplett leer - die entsprechenden ComboBoxen in der GUI sind mit den zuletzt eingefügten Werten der entsprechenden Spalten der importierten Tabellen vorbefüllt.
Das funktioniert auch, wenn eine Tabelle mehrere Fremdschlüssel importiert: So lange in allen importierten Tabellen in der aktuellen Sitzung neue Zeilen eingefügt wurden, sind diese bereits in den ComboBoxen diesem Dialog vorbefüllt!
Dieser Mechanismus funktioniert sowohl für die Erstellung neuer Zeilen übder die GUI der sQLshell als auch über INSERT Statements im SQL-Editor. Auch neue Zeilen, die über Plugins eingefügt werden, werden in diesen Mechanismus einbezogen. Lediglich direkt über ein PreparedStatement eingefügte Zeilen können dafür nicht berücksichtigt werden.
Würden etwa in einem Datenmodell, das eine M-zu-N Beziehung wie folgt definiert:
Modell einer M-zu-N Beziehung
neue Datensätze in die Tabellen author und publication eingefügt, indem die folgenden Anweisungen in der sQLshell im SQL-Editor ausgeführt würden
INSERT INTO author (id, name) VALUES (10000, 'Jules Verne');
INSERT INTO publication (id, date, name) VALUES (20000,'1875-03-03', 'Die geheimnisvolle Insel');
und würde anschließend der Dialog für die Inhaltsansicht der Tabelle authorpublicationmapping geöffnet, um eine entsprechende Verknüpfung mittels der GUI hinzuzufügen, würde der entsprechende Dialog wie beschrieben vorbefüllt geöffnet:
Dialog zur Definition der Beziehung
Weiterhin ist es möglich, einen View zu öffnen, der die zuletzt eingefügte Zeile einer Tabelle enthält. Über die Scripting-API der sQLshell kann das zum Beispiel mit folgendem Code geschehen:
de.netsysit.db.logic.TableDescription[] tds=sQLshellAPI.getCurrentlyVisibleShell().getSelectedTableDescriptions();
if((tds!=null)&&(tds.length>0))
{
for(int i=0;i<tds.length;++i)
{
query=sQLshellAPI.getCurrentlyVisibleShell().getDBMSInterface().generateSelectCommand(tds[i],sQLshellAPI.getCurrentlyVisibleShell().getConnection());
if(query!=null)
{
de.netsysit.db.logic.FilterExpression fe=new de.netsysit.db.logic.FilterExpression(query.substring(query.toUpperCase().indexOf("WHERE")));
sQLshellAPI.getCurrentlyVisibleShell().openContentView(tds[i],fe);
}
else
java.awt.Toolkit.getDefaultToolkit().beep();
}
}
else
java.awt.Toolkit.getDefaultToolkit().beep();
Links - Verschiedenes
03.11.2020
Hier einmal einige Links, die einfach in keine Kategorie passen...
WeiterlesenAndroid Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Java. Komponenten Jupyter JupyterBinder Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Präsentationen Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Ich habe längere Zeit keine Erweiterung meines Docker-Zoos vorgenommen - auch weil ich mir einige konzeptionelle Gedanken dazu gemacht habe. Aber ich habe auch Ideen gesammelt, was in meinem @homelab noch fehlt und was dringend ergänzt werden sollte.
WeiterlesenEine Diskussion brachte mich neulich auf eine Idee - und im Urlaub hatte ich an einem regnerischen Tag genug Zeit, die entsprechenden Experimente zu machen...
WeiterlesenNachdem die Öffentlichkeit letzte Woche wieder mal mitgekriegt haben sollte, dass die Konzentration in der Cloud Schwachsinn ist und - vielleicht nicht - die ganze Öffentlichkeit vor zwei Wochen wieder einmal herzlich gelacht hat über die, die dennoch alles in die Cloud auslagern, aber offensichtlich nicht verstehen, wie sie funktioniert - hier einige Gedanken von mir dazu...
WeiterlesenManche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.