Oracle Datenbank 23c aus der Sicht der Anwendungsentwicklung
In diesem Artikel stellen wir Ihnen die wesentlichen Neuerungen der Oracle Datenbank Version 23c mit dem Schwerpunkt Datenbankanwendungsentwicklung vor. Dabei werden die Bereiche SQL, PL/SQL und JSON unter die Lupe genommen und der Nutzen der Neuerungen für die Anwendungsentwicklung hervorgehoben.
SQL-Domain
Mithilfe einer SQL-Domain kann der Aufbau und das Format von fachlichen Domänen definiert werden. Eine fachliche Domäne kann z. B. eine Kreditkartennummer, E-Mail-Adresse oder eine Hausanschrift sein. Die SQL-Domains werden zentral in der Datenbank als eigenständige Schema-Objekte definiert und beim Anlegen von Datenbanktabellen als ein neuer Datentyp verwendet. Eine SQL-Domain beinhaltet in der Regel ein oder auch mehrere Felder, Constraints und Defaultwerte (siehe Abbildung 1).
Einer der großen Vorteile der SQL-Domains für die Praxis ist die Möglichkeit einer zentralen und redundanzfreien Definition von Datentypen und Constraints für Tabellenspalten, die Daten einer fachlichen Domäne enthalten sollen.
Neuer BOOLEAN Datentyp in SQL
Der Datentyp BOOLEAN mit den Werten „Wahr“ und „Falsch“ kann zusätzlich zu PL/SQL jetzt auch in SQL z. B. für Tabellenspaltendefinitionen verwendet werden. Auf so einer Tabellenspalte können alle herkömmlichen Constraints wie z. B. Primary Key, Check oder Not Null angelegt werden.
Da vor Oracle Version 23c die booleschen Werte mit z. B. „1, ja, t, yes, on“ für „Wahr“ und „0, nein, f, no, off“ für „Falsch“ in Tabellenspalten gespeichert wurden, unterstützt Oracle die Konvertierung dieser Werte in den nativen BOOLEAN Datentyp mit der so genannten impliziten Datentypkonvertierung. Damit ist gemeint, dass wenn bei einer INSERT-Anweisung in eine BOOLEAN Tabellenspalte z. B. der Wert „t“ übergeben wird, so wird dieser als „Wahr“ abgespeichert (siehe Abbildung 2).
Mit dem lang ersehnten BOOLEAN Datentyp wird die Speicherung von booleschen Werten in Tabellenspalten vereinheitlicht und standardisiert.
SQL Property Graphs und SQL/PGQ Standard
Eine weitere wichtige Neuerung in Oracle Version 23c ist die Möglichkeit der Modellierung von Graphen. Graphen bestehen aus Knoten (Objekten) und Kanten (Verbindungen). Sie vereinfachen die Abbildung hierarchischer sowie vernetzter Strukturen. Knoten können z. B. Personen, Unternehmen, Konten oder Fahrzeuge sein und Kanten stellen die Beziehungen zwischen den Knoten dar (siehe Abbildung 3).
Graphen werden mithilfe der SQL Property Graphs modelliert. SQL Property Graphs sind Schema-Objekte, welche die Knoten (Tabellen mit Objekten) und die Kanten (Fremdschlüssel-Beziehungen zwischen den Objekten) beinhalten (siehe Abbildung 4)
Die Property Graph Query (SQL/PGQ) ist eine spezielle Abfragesprache, mit deren Hilfe die SQL Property Graphs genutzt werden können, um Abfragen gegen die Knoten und Kanten zu stellen (siehe Abbildung 5).
Der große Vorteil der SQL/PGQ Abfragesprache ist die Abstrahierung der Tabellenbeziehungen (Primary Key und Fremdschlüsselbeziehungen) und damit die Vereinfachung der SQL-Syntax. Die Tabellenbeziehungen sind dabei nur an einer zentralen Stelle in den SQL Property Graphs definiert, und müssen bei den SQL-Anweisungen in den Join-Verknüpfungen nicht jedes Mal neu angegeben werden.
Annotations
Annotations sind eine Art strukturierte Kommentare für Tabellen und Spalten. Bei den herkömmlichen Tabellen- und Spalten-Kommentaren mit der „COMMENT ON …“ Syntax, handelt es sich um unstrukturierte Texte, die, falls eine maschinelle Verarbeitung stattfinden sollte, entsprechend aufwändig geparst werden müssen.
Die Annotations werden als Key-Value-Paare gespeichert und können für die Dokumentation und Klassifizierung von DB-Objekten genutzt werden. Als Beispiel können Informationen wie die Sensitivität, Formate, Gruppierung, Maskierung von Daten oder auch Versionierung (ab wann sind welche Spalten bzw. Tabellen verfügbar) gespeichert werden. Die Annotations eignen sich sehr gut für die maschinelle Verarbeitung und können von verschiedenen Anwendungen, die auf die Datenbank zugreifen, verarbeitet werden (siehe Abbildung 6).
Mit Annotations können somit Metadaten der Anwendungen zentral und strukturiert in der Datenbank gespeichert werden.
Neue FROM-Klausel bei UPDATE und DELETE
Sollen Daten in einer Tabelle auf Basis einer anderen Tabelle gelöscht werden, so musste bisher in SQL bei der DELETE-Anweisung eine Unterabfrage verwendet werden. Sollen Daten in einer Tabelle auf Basis einer anderen Tabelle aktualisiert werden, so musste vor Oracle Version 23c statt der UPDATE-Anweisung die MERGE-Anweisung verwendet werden.
Mit der neuen FROM-Klausel bei UPDATE und DELETE-Anweisungen können ab Oracle Version 23ai Joins mit anderen Tabellen direkt in der DML-Anweisung definiert werden. Der große Vorteil dieser Erweiterung ist, dass die im oberen Abschnitt beschriebenen Sachverhalte, ohne Unterabfragen und auch ohne eine MERGE-Anweisung realisiert werden können (siehe Abbildung 7).
IF [NOT] EXISTS für DDL-Anweisungen
Die neue „IF [NOT] EXISTS“ Klausel kann beim Anlegen, Verändern und Entfernen von Datenbankobjekten genutzt werden, um Fehlermeldungen im Zusammenhang mit der Existenz oder nicht Existenz von Objekten zu verhindern. Ist beim Anlegen von einem Objekt dieses schon vorhanden, so kann mit der „IF NOT EXISTS“ die Fehlermeldung „name is already used by an existing object“ verhindert werden. Umgekehrt kann beim Löschen von einem Objekt mit der „IF EXISTS“ Klausel die Fehlermeldung „table or view does not exist“ verhindert werden.
Der wesentliche Vorteil der „IF [NOT] EXISTS“ Klausel ist die Verbesserung der Fehlertoleranz und die damit verbundene Vereinfachung von Datenbankwartungsskripten.
PL/SQL-Neuerungen
Im PL/SQL-Bereich sind folgende Neuerungen hervorzuheben:
- Oracle Database MLE für JavaScript
- Ubiquitous Database Search mit DBMS_SEARCH
- Automatischer PL/SQL in SQL Transpiler
MLE steht für Oracle Database Multilingual Engine und ermöglicht eine Implementierung von Stored Procedures in JavaScript. Die Hauptvorteile der Nutzung von JavaScript in der Datenbank ist zum einen die große JavaScript-Verbreitung und die hohe Beliebtheit unter den Entwicklern. Zum anderen bietet diese Skriptsprache eine große Anzahl an Bibliotheken mit zahlreichen Funktionalitäten. Ein weiterer Vorteil der Nutzung von JavaScript in der Datenbank ist die datennahe Verarbeitung, die im Gegenteil zu einer Verarbeitung auf einem Anwendungsserver, keinen Netzwerkoverhead verursacht.
Ubiquitous Database Search dient der Suche in mehreren Datenbanktabellen. Die Spalten der Datenbanktabellen werden dafür mit einem speziellen Oracle TEXT Index indiziert und stehen für eine Volltext- und bereichsbasierte Suche zur Verfügung. Ein Ubiquitous Database Search Index wird mit dem DBMS_SEARCH PL/SQL-Package angelegt.
Mit dem automatischen PL/SQL in SQL Transpiler werden PL/SQL-Funktionsaufrufe in einer SQL-Anweisung mithilfe der Query Transformation durch den Inhalt der PL/SQL-Funktion ersetzt. Durch diese Ersetzung findet kein aufwändiger Kontext-Wechsel zwischen der PL/SQL- und SQL-Laufzeitumgebung pro Datensatz statt und die ‚Ausführungszeit wird deutlich reduziert. Die Transpiler Funktionalität kann über den SQL_TRANSPILER Initialisierungsparameter aktiviert werden. Darüber hinaus ist die Nutzung dieser Funktionalität für die Anwendungen völlig transparent, d. h. die SQL-Anweisungen müssen hierfür nicht angepasst werden.
JSON-Neuerungen
Im JSON-Bereich gibt es ab Oracle Version 23c folgende Neuerungen:
- JSON-Schema
- JSON-relationale Dualität
- Erweiterung des JSON-Datentyp-Konstruktors
Mit einem JSON-Schema kann der Aufbau und die Typisierung von JSON-Dokumenten festgelegt werden. Derartige JSON-Schemas können z. B. für die Validierung von Daten bei der Erstellung einer Tabelle genutzt werden, um sicherzustellen, dass nur valide JSON-Dokumente in einer Tabellenspalte gespeichert werden (siehe Abbildung 8).
Darüber hinaus wurde die sogenannte JSON-relationale Dualität hinzugefügt. Dabei handelt es sich um DML-fähige JSON-Views, die auf relationalen Tabellen basieren. Derartige JSON-Views sind vor allem für Anwendungen gut geeignet, die eine dokumentenorientierte Sicht (JSON-Dokumente) auf die Daten benötigen. Eine Anwendung kann anschließend die JSON-Dokumente verändern und über die DML-fähigen JSON-Views in relationalen Tabellen persistieren. Eine doppelte Datenspeicherung, relational und dokumentenorientiert, die häufig in der Praxis vorzufinden ist, ist dabei nicht mehr notwendig.
Um die Erstellung von JSON-Dokumenten zu erleichtern, wurde der JSON-Datentyp-Konstruktor um weitere komplexe Datentypen erweitert. Mit einem JSON-Datentyp-Konstruktor werden für die übergebenen Werte, JSON-Dokumente erstellt. Neben den einfachen skalaren Datentypen wie NUMBER oder VARCHAR2 werden ab Oracle 23c Datentypen wie Collections, Object Types oder auch Records unterstützt. Das Ergebnis vom JSON-Datentyp-Konstruktor ist dann ein valides JSON-Dokument.
Fazit
Zusammenfassend kann gesagt werden, dass die Oracle Version 23c viele interessante und hilfreiche Funktionen für die Anwendungsentwicklung mitbringt. Mithilfe der Neuerungen kann die Entwicklerproduktivität gesteigert werden, Fehleranfälligkeit verringert und damit auch die Wartbarkeit der Programme verbessert werden. Im JSON-Bereich ist vor allem die Verbesserung der Interoperabilität zwischen der relationalen und dokumentenorientierten Welt hervorzuheben. Durch Einsatz einiger Neuerungen kann schließlich auch die Perfomance verbessert werden.
Die hier grob vorgestellten Neuerungen stellen nur eine kleine Auswahl der Oracle 23c Neuerungen dar. Falls wir Ihr Interesse zu diesem Thema geweckt haben, empfehlen wir Ihnen das „Oracle 21c/23c Neuheiten für Entwickler“ Seminar.
Principal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare