Virtabs: Bildung von Daten-Teilmengen

Eine wesentliche Eigenschaft der Virtabs ist die Möglichkeit, Datenmengen der Datenbank durch inhaltliche Kriterien reduziert darzustellen. Dies erleichtert das Schreiben von Anwendungen, und sichert die Datenbank gleichzeitig gegen gewollte oder ungewollte Zerstörungen durch Zugriff von aussen.
Wichtig ist auch hier wieder die Möglichkeit, auf reduzierte Datensätze schreiben zu können, wobei die Virtabs “im Hintergrund” die fehlenden Informationen ergänzen.

Dadurch kann einer Anwendung gegenüber nur der Teil-Datenbestand veröffentlicht werden, den sie wirklich braucht und versteht (Grafik).

Es gibt zwei unterschiedliche Mechanismen:

  • das Verbergen von Basistabellen-Spalten
  • das Verbergen von Basistabellen-Records

Spalten verbergen mit COLUMN ... INVISIBLE DEFAULT

Natürlich brauchen Spalten zunächst nicht “versteckt” zuwerden, sie werden ja erst bei Bedarf inenrhalb einer Virtab definiert. Manchmal muss aber eine Datenbankspalte mit einem Wert belegt werden, obwohl die Spalte in der Virtab nicht erscheine soll.

Es ist möglich, beliebige Spalten einer Virtab mit Defaultwerten zu belegen, z.B. in Situationen, wo Teile eines zu übergebenden Datensatzes noch unbekannt, aber trotzdem strukturell obligatorisch sind.  Spalten, für die Defaultwerte angegeben wurden, können versteckt werden. Sie sind dann nach aussen hin nicht als Spalten sichtbar, bleiben aber bei Operationen mit der Virtab wirksam. Die Virtab-Prozeduren tragen die Werte unsichtbarer Spalten in die Basistabellen ein.

Unsichtbare Spalten müssen mit konstanten Werten belegt werden, dies geschieht mit der DEFAULT-Anweisung. Wenn mehr Logik in die Virtab implementiert werden soll, kann man mit ONINSERT, ONUPDATE und ONDELETE arbeiten.

Records verbergen mit CONSTRAINT

Zur Definition einer Virtab kann neben der Auswahl von Spalten aus der Datenbank auch die Auswahl der in die Virtab aufzunehmenden Zeilen (= Datensätze) gehören. Dies geschieht über die CONSTRAINT-Bedingungen.

  • Bei der Abfrage werden nur Zeilen geliefert, die allen Constraints genügen.
  • Es können nur Zeilen in eine gegebenen Virtab eingefügt werden, die den Constraints genügen.
  • Ebenso müssen die Tupel, die mit update/delete behandelt werden sollen, allen Constraints genügen.

Eine Basis-Virtab kann mit dieser Funktionalität z.B. durch zwei sich wechselseitig ausschließende Constraints in zwei inhaltlich disjunkte Virtabs geteilt werden, die dennoch auf die gleichen Datenbank-Spalten zugreifen.

Beispiel: Angenommen, es wurde eine Virtab “depts” erzeugt, die die Beschreibungen von Geschäftstellen und Abteilungen mit deren Adressen zusammenfasst (siehe Beispiel). Es sei aber wünschenswert, für verschiedene Bearbeiter die Daten verschiedener Geschäftsstellen als logisch getrennte Virtabs darzustellen. Dazu wird die Virtab “depts” unter verschiedenen Namen mehrfach angelegt, die einzelnen Definitionen unterscheiden sich nur in ihren CONSTRAINTs.

In Pseudocode:

1. CREATE VIRTUALTABLE depts_NewYork
         ....
         Definitionscode von DEPTS
         ....
   CONSTRAINT regional_group = 'New York' ;

2. CREATE VIRTUALTABLE depts_Boston
         ....
         Definitionscode von DEPTS
         ....
   CONSTRAINT regional_group = 'Boston' ;

So werden mehrere schnittmengenfreie Untergruppen von “depts” beschrieben, die datenbanktechnisch in sich konsistent sind.

INVISIBLE ergänzt CONSTRAINT

Unter pragmatischen Gesichtspunkten wird es oft nahe liegen, CONSTRAINT-Anweisungen mit DEFAULT oder auch INVISIBLE DEFAULT zu verbinden. Denn wenn der Zweck einer Virtab gerade die Einschränkung der bearbeitbaren Datensätze ist, sollten die Kriterien der Einschränkung nicht nur überwacht, sondern bereits von der Virtab selbst vorgegeben werden. Das einschränkende Kriterium kann dann zusätzlich auch noch versteckt werden (INVISIBLE).

3. CREATE VIRTUALTABLE depts_Dallas
         ....
         Definitionscode von DEPTS
         ....
   COLUMN regional_group ... INVISIBLE
         ....
CONSTRAINT DEFAULT regional_group = 'Dallas' ;

 

 

[Konzepte] [Virtab-Prozeduren] [LINK, FOREIGNKEY] [QUERY: Mehrfachzugriffe] [USES und Verschmelzen] [Schreibschutz, -zwang] [Daten-Teilmengen] [Synthetische Spalten] [User-SQL]