Oracle 26ai Assertions für komplexe Datenregeln

Überblick

Oracle bietet eine Fülle an Werkzeugen, um Datenintegrität und Datenqualität zu gewährleisten. Diese werden allgemein unter dem Begriff CONSTRAINT zusammengefasst. Dazu gehören unter anderem

  • Primary Key Constraint
  • Unique Key Constraint
  • Foreign Key Constraint
  • Check Constraint
 

Was sie alle gemeinsam haben, ist die Tatsache, dass sie (außer über komplexe und Performance-seitig schwache Umwege wie Funktionen in Check Constraints oder Materialized Views)

  • Nur eine Tabelle prüfen können
  • Innerhalb einer Tabelle nicht über mehrere beliebige Zeilen prüfen können
 

Üblicherweise wurden solche Themen dann applikatorisch gelöst, was aber keine Garantie für korrekte Daten ist, da

  • Randfälle vergessen werden
  • Aus Wartungsgründen API Funktionen ohne diese Checks existieren
  • Direkte Datenmanipulation in der Datenbank davon nicht berührt werden
 

Wenn nun beispielsweise in Verwaltungssystem für mehrere Schulen hat, dann sollen in diesem z.B. folgende Dinge gesichert sein:

  1. Fächer eines Lehrers dürfen sich innerhalb eines Schuljahres zeitlich nicht überschneiden
  2. Jeder Lehrer unterrichtet pro Schuljahr in maximal 4 verschiedenen Klassen
  3. Jeder Lehrer unterrichtet pro Schuljahr zumindest 5 Einheiten
 

Hier kommt mit Oracle 26ai (Release 23.26.1) ein neues Feature, um genau diese Prüfungsmöglichkeit nativ in der Datenbank zu entwickeln. Das Feature nennt sich Assertions – es hat aber außer der Namensähnlichkeit nichts mit dem Oracle Package dbms_assert zu tun.

Gehen wir von folgendem Datenmodell aus:

  • Tabelle Schuljahre
    • ID
    • Name
  • Tabelle Klassen
    • ID
    • Bezeichnung
  • Fächer
    • ID
    • Bezeichnung
  • Lehrer
    • ID
    • Name
  • Stunden
    • ID
    • Schuljahr-ID
    • Klassen-ID
    • Fach-ID
    • Lehrer-ID
    • Beginn (Uhrzeit in Minuten also 480 für 08:00)
    • Ende (Uhrzeit in Minuten also 480 für 08:00)
Blog CHILL Assertion 1
Blog CHILL Assertion 2
Blog CHILL Assertion 3 1

Assertion 3

Die dritte Assertion soll sicherstellen, dass jeder Lehrer muss pro Schuljahr mindestens 5 Einheiten unterrichtet. Eine entsprechende Assertion könnte so aussehen:

Blog CHILL Assertion 4 1
Blog CHILL Assertion 5

Es werden die Einheiten 5-mal miteinander verknüpft und sichergestellt, dass sich die Fächer bzw. Klassen bei den 5 Abfragen immer unterscheiden. Sollte ein Lehrer weniger als 5 Fächer unterrichten, würde die Assertion einen Fehler ausgeben. Die Keywords am Ende funktionieren analog zu anderen Constraints – sie verschieben die Validierung ans Ende der Transaktion. Wenn ich nun einen neuen Lehrer eintrage und die 5 Fächer ebenfalls und erst danach ein Commit ausführe, dann ist die Assertion erfüllt z.B. wie folgt:

Blog CHILL Assertion 6

Nun könnte man das ganze einfacher und eleganter über eine Aggregation wie COUNT(*) lösen – das gehört aber lt. Oracle Doku momentan noch zu den nicht unterstützten Möglichkeiten (eine Auflistung der wichtigsten Einschränkungen folgt am Ende).

Um die doppelten NOT EXIST zu umgehen welche wenig intuitiv sind, hat Oracle noch eine zusätzliche Syntax des SATISFY … ALL entwickelt. Wir können die dritte Assertion mit dieser Syntax umschreiben, dann würde sie wie folgt aussehen:

Blog CHILL Assertion 7
Blog CHILL Assertion 8
Blog CHILL Assertion 9
Blog CHILL Assertion 10

Einschränkungen

Die wichtigsten Einschränkungen sind die folgenden:

  • Keine Aggregationen (also kein COUNT, MAX, MIN) oder Analytischen Funktionen
  • Keine ANSI JOINS (also kein JOIN ON)
  • Keine Tabellen die SYS-Owned sind – das inkludiert unter anderem DUAL
  • Keine nicht-deterministischen Funktionen wie z.B. SYSDATE

More information can be found here: CREATE ASSERTION

DBConcepts

Weitere Beiträge

How to Renew Certificates in OLVM 4.5

How to Renew Certificates in OLVM 4.5 Managing certificates in Oracle Linux Virtualization Manager (OLVM) is an important part of maintaining a secure and reliable

Lizenzbilanz im SAM: Kostenfallen erkennen

Hat die „Lizenzbilanz auf Knopfdruck“ ausgedient? Die Illusion der perfekten Transparenz In nahezu jeder Tool-Präsentation sehe ich dieselbe Folie. „Lizenzbilanz auf Knopfdruck.“ In der Theorie

Vielen Dank für Ihr Interesse an unserem Unternehmen. Derzeit suchen wir niemanden für diese Stelle. Aber wir sind immer an talentierten Menschen interessiert und freuen uns von Ihnen zu hören! Schicken Sie uns einfach Ihren Lebenslauf und eine kurze Nachricht und schreiben Sie an welcher Stelle Sie interessiert sind: recruitment@dbconcepts.com. Wir freuen usn von Ihnen zu hören!

DBConcepts

Newsletter abonnieren

Wir freuen uns, dass wir Ihr Interesse für den Newsletter geweckt haben! Mit dem Versand dieser Zustimmung erhalten Sie regelmäßig alle aktuellen Informationen!