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();
Synchronisierung von Lorenz-Systemen III
23.10.2020
Nachdem ich in einem vorhergehenden Artikel auf das Problem des kleinen Parameterraums im Zusammenhang mit der Nutzung synchronisierter chaotischer Systeme hingewiesen hatte will ixch hier untersuchen, wie sensibel solche Systeme auf Abweichungen der Parameterwerte zwischen treibendem und getriebenen System reagieren
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 neulich beschrieben, dass ich aktuell mehr und mehr bemerke, dass Dinge, für die ich in meinem NeoVim-Setup Plugins benutzt habe sehr gut auch mit Bordmitteln funktionieren.
WeiterlesenIch habe neulich wieder einmal eine Upgrade- und Backup-Sitzung mit meinen diversen Linuxinstallationen veranstaltet. Der Zeitpunkt schien mir gekommen, da es eine neue stable Variante von Debian (Trixie) gibt.
WeiterlesenIch diskutiere immer wieder gern über das was heute Machine Intelligence oder Artificial Intelligence ( oder wie die ganzen anderen hohlen Phrasen heißen, die dafür heutzutage als Buzzwords missbraucht werden). Das geschieht online, in meinem $dayjob oder auch privat. Meine Meinung steht fest: das ist alles Quatsch und steht in keiner Relation zum Nutzen
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.