Domäne

<< Datenbankobjekte | IBExpert | Tabelle >>

Die deutschsprachige Dokumentation wird seit dem 26. Juli 2016 nicht mehr gepflegt. Aktuelle und vollständige Dokumentation finden Sie auf der englischsprachigen Webseite: IBExpert Documentation


Domäne

Eine Domäne ist ein die Datenbank umfassender, benutzerdefinierter Datentyp. Eine Domäne wird verwendet, um Formate und Umfang von Spalten zu definieren, auf denen aktuelle Spaltendefinitionen in Tabellen basieren können.

Dies ist sinnvoll, wenn Spalten in einer oder mehreren Datenbanktabellen die gleichen Eigenschaften haben, da es wesentlich einfacher ist, einen solchen Spaltentyp und sein Verhalten in einer Domäne zu beschreiben. Die Spalten können dann einfach durch Bestimmung des Domänennamens in der Spaltendefinition definiert werden. Die Spalteneigenschaften (z.B. Feldlänge, Typ, Not Null, Constraints, Arrays etc.) müssen so nur einmal in der Domäne definiert werden. Domänen helfen Ihnen eine einheitliche Struktur für Ihre Stammfelder (z.B. ID, Adresse und Währungsfelder) zu schaffen und macht so die Datenbankstruktur verständlicher.

Die Domainstandardeinstellungen, Collation und NOT NULL Parameter können durch die Felddefinition überschrieben werden, und ein auf einem Domänen basiertes Feld kann auch, zusätzlich zu den Domänen-Beschränkungen, weitere CHECK-Beschränkungen enthalten.

Eine Domäne ist ein Datenbankobjekt und ist Teil der Metadaten der Datenbank. Eine Domäne kann, wie alle anderen Firebird/InterBase® Objekte, im IBExpert DB Explorer erzeugt, geändert und gelöscht werden.

Wenn Sie eine normalisierte Datenbank entwickeln, kommt die Frage auf, inwieweit Domänen notwendig sind (multiple Felder, multiple Daten etc.). Es erleichtert einem jedoch das Leben, falls Spaltenänderungen notwendig werden sollten; z.B. Postleitzahlenänderung von 4 auf 5-stellig (wie es in Deutschland nach der Wiedervereinigung der Fall war), Wechsel von Währungen (z.B. von DM oder Lire auf Euro). In diesen Fällen muss lediglich die Domäne geändert werden und nicht jede einzelne betreffende Spalte in jeder Tabelle der gesamten Datenbank.

Es sollte auch beachtet werden, dass, wenn benutzerdefinierte Domänen, die nicht explizit definiert wurden, zur Tabellenspaltendefinition verwendet werden, Firebird/InterBase® eine neue Domäne für jede einzelne erzeugte Tabellenspalte erzeugt. Alle Domänen werden in der Systemtabelle RDB$FIELDS gespeichert.

Domänenintegrität

Domänenintegrität stellt sicher, dass eine Spalte innerhalb der erlaubten Grenzen gehalten wird. Dies wird über Schlüssel und Beschränkungen (Constraints) erreicht.

zurück zum Seitenanfang

Neue Domäne / Domäneneditor

Eine neue Domäne kann für eine verbundene Datenbank entweder durch Verwendung des Menüpunktes Datenbank / Neue Domäne oder mit dem Rechtsklickmenü im DB Explorer (oder der Tastenkombination [Strg + N], wenn der Domänentitel der entsprechenden verbundenen Datenbank markiert ist) oder mit dem Neue-Domäne-Symbol in der Neue-Datenbankobjekte-Symbolleiste erzeugt werden.

Ein Neue Domäne Fenster erscheint mit einer eigenen Symbolleiste und einem aufklappbaren Menü (Schaltknopf Domäne). Die Domänen-Editor-Symbolleiste bietet folgende Optionen an:

  • Direktes Modifizieren der Systemtabellen
  • Kompiliere
  • Dupliziere Domain
  • Navigationsbuttons
  • Gruppiert durch: keine, Typ, Zeichensatz
  • Zeige alle

Für diejenigen, die den alten IBExpert Modaleditor bevorzugen: Aktivieren Sie die Option Use old-style Modal Editor im IBExpert Menü Optionen / Objekteditor Optionen / Domäneneditor.

Eine Domäne kann auch erzeugt oder selektiert und editiert werden, wenn im Tabelleneditor ein neues Feld erzeugt oder ein bestehendes Feld mit dem IBExpert Tabelleneditor editiert wird. (Weitere Informationen hierzu finden Sie im Absatz Feld einfügen.)

Die folgende Abbildung zeigt die Erzeugung eine neuen Domäne im Domäneneditor: zunächst wird ein Domänenname bestimmt (1) in der ersten Spalte auf der ersten Seite Domänen:

(Abbildung zeigt den Standard-Domäneneditor.)

  • (2) Feldtyp: Hier kann der Datentyp festgelegt werden.
  • (3) Länge: Bestimmt die Feld-länge.
  • (4) Scale: Hier kann für alle numerischen Felder die Anzahl der Dezimalstellen bestimmt werden.
  • (5) Nicht Null: Diese Checkbox kann per Doppelklick oder unter Verwendung der Leertaste markiert werden. NOT NULL erzwingt die Dateneingabe für dieses Feld (d.h. das Feld kann nicht leer gelassen werden).
  • (6) Subtype: Ein Subtype sollte für Blob-felder festgelegt werden.
  • (7) Zeichensatz: Ein Zeichensatz kann für einzelne Domänen festgelegt werden. Dies überschreibt den Datenbank-Standardzeichensatz. Obwohl selten genutzt, kann es notwendig werden, sollte beispielsweise eine asiatische, russische oder arabische Adresse in eine Datenbank mit europäischem Standardzeichensatz eingegeben und sortiert werden müssen.
  • (8) Sortierfolge: Bestimmt die Collation (Sortierfolge) für einen für die Domäne festgelegten Zeichensatz.
  • (9) Standardquelle: Hier kann ein Standard für eine Dateneingabe festgelegt werden (Text oder numerisch, abhängig vom festgelegten Datentyp), z.B. kann der Text UNBEKANNT als Standardquelle angegeben werden, wenn ein Adressfeld nicht vom Benutzer ausgefüllt werden kann, weil die Information nicht zur Verfügung steht.
  • (10) Check: Jeder Datensatz wird auf Gültigkeit in Bezug auf einen in Klammern definierten Ausdruck (Expression) überprüft. Bestimmte Bedingungen können festgelegt werden (siehe Check Constraint), die eine automatische Datenbanküberprüfung während der Dateneingabe bewirken, um die Datenbeständigkeit in den Tabellen und untereinander zu gewährleisten.
  • (11) Array: Obwohl Arrays den Regeln der Datenbanknormalisierung widersprechen, gibt es bestimmte Situationen (beispielsweise beim Speichern von Messdaten), in denen sie notwendig sind.
  • (12) Beschreibung: Nützlich für Datenbankdokumentation. Die Seite Beschreibung sollte verwendet werden, um die Domäne zu beschreiben; das Feld Beschreibung dient der Beschreibung des Feldes.

Mehrere Domänen können simultan im Editor Neue Domäne erzeugt werden. Vergessen Sie nicht nach Erzeugung der neuen Domäne(n) inklusive aller erforderlichen Parameter, mit den Tasten [Strg + F9] oder dem entsprechenden Symbol zu kompilieren:

und abschließend auf Commit klicken, oder sollten Änderungen notwendig sein auf Rollback.

Tipp: durch Anklicken des Spaltenkopfes (d.h. PK, FK, Feldname etc.), können die Felder in ab- oder aufsteigender Reihenfolge, basierend auf dieser Spalte sortiert werden. Per Doppelklick auf díe rechte Kante des Spaltenkopfes wird die Spaltenbreite eingestellt.

Zusätzlich zu der Domänen-Seite gibt es ebenfalls die Seiten Beschreibung, Benutzt von, DDL, Vergleich und To-Do:

  • Beschreibung: hier wird die Beschreibung der markierten Domäne angezeigt (d.h. die Domäne, auf der zur Zeit der Cursor steht).
  • Verwendet von: zeigt an welche Datenbankobjekte diese Domäne verwenden oder von ihr abhängig sind.
  • DDL: die Seite DDL zeigt die von IBExpert zur Erzeugung aller vom Benutzer auf der Seite Domäne vorgenommenen Spezifikationen erzeugten SQL Anweisungen.
  • Vergleich: dieses Feature Ihnen eine Domäne in der Hauptdatenbank mit einer Domäne in einer Vergleichsdatenbank zu vergleichen (Weitere Information finden Sie unter Vergleich)
  • To-Do: dieses Feature kann verwendet werden, um Ihre Datenbankentwicklung zu organisieren. Sie können ToDo-Themen für jedes Objekt in der Datenbank hinzufügen.

Domänen können auch direkt vom Editor Neues Feld aus erzeugt und bearbeitet werden (weiteres finden Sie unter Feld einfügen).

Domänen können natürlich auch per DDL direkt im SQL Editor mit folgender Syntax erzeugt werden:

 CREATE DOMAIN domain [AS] <datatype>
 [DEFAULT {literal | NULL | USER}] 
 [NOT NULL] CHECK (<dom_search_condition>)]
 [COLLATE collation];

 <datatype> = 
 {SMALLINT|INTEGER|FLOAT|DOUBLE PRECISION} [<array_dim>]

 | {DATE|TIME|TIMESTAMP} [<array_dim>]

 | {DECIMAL | NUMERIC} [(precision [, scale])] [<array_dim>] 
 | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]
 [<array_dim>] CHARACTER SET charname] 

 | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} 
 [VARYING] [(int)] [<array_dim>] 

 | BLOB SUB_TYPE {int | subtype_name}] SEGMENT SIZE int]
 [CHARACTER SET charname]

 | BLOB [(seglen [, subtype])]	

 <array_dim> = [[x:]y [, [x:]y …]]

 <dom_search_condition> = {
 VALUE <operator> value 
 VALUE [NOT] BETWEEN value AND value 
 | VALUE [NOT] LIKE value [ESCAPE value] 
 | VALUE [NOT] IN (value [, value …]) 
 | VALUE IS [NOT] NULL 
 | VALUE [NOT] CONTAINING value 
 | VALUE [NOT] STARTING [WITH] value
 | (<dom_search_condition>)
 | NOT <dom_search_condition>
 | <dom_search_condition> OR <dom_search_condition>
 | <dom_search_condition> AND <dom_search_condition>
 }

 <operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
ArgumentBeschreibung
domainEindeutiger Domänen-Name.
datatypeSQL-Datentyp.
DEFAULTBestimmt einen Default-Spaltenwert, der automatisch eingefügt wird, wenn keinen anderen Wert eingegeben wird; mögliche Werte sind:
• Literal — fügt einen vorgegebenen String, numerischen Wert oder Datum ein.
NULL — fügt einen NULL-Wert ein.
USER — Fügt den Usernamen des aktuellen Users ein.
Die Spalte muss mit einem kompatiblem Charaktertyp definiert werden, um den Default zu verwenden.
NOT NULLBestimmt, dass die in eine Spalte eingegebenen Werte nicht NULL sein dürfen.
CHECK (dom_search_condition)Erzeugt eine einzige CHECK-Beschränkung für die Domäne.
VALUEPlatzhalter für den Namen einer auf der Domänen basierten Spalte.
COLLATE collationBestimmt die Sortierreihenfolge für die Domäne.

Zum Beispiel:

 CREATE DOMAIN MATCHCODE
   AS INTEGER
      DEFAULT  999999
      NOT NULL
      CHECK (VALUE > 100000);

zurück zum Seitenanfang

Ändere Domäne

Eine Domäne kann im Domäneneditor geändert werden. Dieser kann per Doppelklick auf den Domänennamen im DB Explorer geöffnet werden. Alternativ können Sie den Rechtsklickmenüpunkt Domäne bearbeiten im DB Explorers verwenden oder die Tasten [Strg + O].

CHECK Instruktionen und Standardwerte können hinzugefügt, geändert oder gelöscht werden. Es ist jedoch nicht möglich den Basis-Datentyp zu ändern (z.B. von NUMERIC auf VARCHAR). Es ist ebenfalls nicht möglich, eine NOT NULL Beschränkung zu löschen. Um diese zu löschen, muss die Domäne gelöscht und erenut erzeugt werden (siehe Lösche Domäne).

Bitte beachten Sie: Wenn Sie die CHECK Beschränkung für eine Domäne ändern wollen, die bereits eine Beschränkung definiert hat, muss die bestehende Beschränkung zunächst gelöscht und dann die neue hinzugefügt werden. ADD CHECK ersetzt nicht die aktuelle Beschränkung mit der Neuen. Es ist also wichtig zu wissen, das die Änderung einer CHECK Beschränkung keine vorhandene Datenbankzeilen bezüglich ihrer Gültigkeit aktualisiert; CHECK Beschränkungen werden nur gültig, wenn ein INSERT oder UPDATE vorgenommen wird. Ein Weg diese Einschränkung zu umgehen, ist eine UPDATE Abfrage mit einer Dummy-Operation durchzuführen. Wenn vorhandene Zeilen gegen die neue CHECK Beschränkung verstoßen, schlägt die Abfrage fehl. Diese Zeilen können mit einem SELECT extrahiert werden.

Jede Änderung wirkt sich sofort auf alle Spalten aus, die der Domänendefinition unterliegen, solange diese nicht von der Spalten-(Feld-)Definition überschrieben werden.

Die SQL Syntax für diesen Befehl lautet:

 ALTER DOMAIN name {
 SET DEFAULT {literal | NULL | USER} 
 | DROP DEFAULT 
 | ADD [CONSTRAINT] CHECK (<dom_search_condition>) 
 | DROP CONSTRAINT | new_col_name
 | TYPE datatype};

 <dom_search_condition> = {
 VALUE <operator> <val> 
 | VALUE [NOT] BETWEEN <val> AND <val> 
 | VALUE [NOT] LIKE <val> [ESCAPE <val>] 
 | VALUE [NOT] IN (<val> [, <val> …]) 
 | VALUE IS [NOT] NULL 
 | VALUE [NOT] CONTAINING <val> 
 | VALUE [NOT] STARTING [WITH] <val>
 | (<dom_search_condition>)
 | NOT <dom_search_condition>
 | <dom_search_condition> OR <dom_search_condition>
 | <dom_search_condition> AND <dom_search_condition>
 }

 <operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
ArgumentBeschreibung
nameName der Domäne.
SET DEFAULTBestimmt einen Default-Spaltenwert, der automatisch eingefügt wird, wenn keinen anderen Wert eingegeben wird; mögliche Werte sind:
• Literal — fügt einen vorgegebenen String, numerischen Wert oder Datum ein.
NULL — fügt einen NULL-Wert ein.
USER — Fügt den Usernamen des aktuellen Users ein.
Die Spalte muss mit einem kompatiblem Charaktertyp definiert werden, um den Default zu verwenden.
• Standardwerte, die auf Spaltenebene definiert werden, überschreiben Spaltenwerte, die auf Domänenebene definiert werden.
DROP DEFAULTLöscht einen Defaultwert.
ADD [CONSTRAINT] CHECK
dom_search_condition
Fügt eine CHECK-Beschränkung zur Domänendefinition ein; jede Domänendefinition darf nur eine CHECK-Beschränkung enthalten.
DROP CONSTRAINTLöscht die CHECK-Beschränkung von der Domänendefinition.
new_col_nameÄndert den Domänennamen.
TYPE data_typeÄndert den Domänen-Datentyp.

zurück zum Seitenanfang

Lösche Domäne

Eine Domäne kann nur gelöscht werden, wenn sie nicht gerade von einer Datenbanktabelle verwendet wird. Die Seite Verwendet von (Used By) im Domäneneditor zeigt an, welche Datenbankobjekte diese Domäne nutzen. Die abhängigen Objekte können hier, direkt gelöscht werden, indem Sie den Rechtsklickmenüpunkt Lösche Objekt oder die Tasten [Strg + Entf] drücken, nachdem Sie das Objekt markiert haben.

Um eine Domäne zu löschen, verwenden Sie im DB Explorer das Rechtsklickmenü und wählen Sie den Menüpunkt Lösche Domäne oder die Tasten [Strg + Entf].

Alternativ kann eine Domäne auch direkt im Domöneneditor mit dem Menü Domäne gelöscht werden, oder dem "-" Symbol in der Symbolleiste des Domäneneditors. IBExpert bittet um Betätigung:

bevor die Domäne endgültig gelöscht wird. Einmal gelöscht, kann sie nicht zurückgeholt werden. Die Domäne muss bei versehentlicher Löschung erneut erzeugt werden!

Die SQL Syntax dafür lautet:

 DROP DOMAIN <domain_name>;

Eine Domäne kann nur von ihrem Erzeuger oder vom SYSDBA gelöscht werden.

zurück zum Seitenanfang

Dupliziere Domäne

Es ist möglich eine neue Domäne auf Basis einer bereits vorhandenen Domäne mit dem Menüpunkt Dupliziere Domäne zu erzeugen oder mit dem

entsprechenden Symbol in der Symbolleiste des Domäneneditors.

Es wird eine exakte Kopie der ausgewählten Domäne erstellt, die dann entsprechenden angepasst werden kann. Beispielsweise eine neue Domäne SUPPNO könnte auf der Domäne CUSTNO ind der EMPLOYEE Datenbank basieren, durch duplizieren und anschließender Umbenennung und Änderung des Prüfwertes in CHECK VALUE > 5000.

Dies spart Zeit beim erzeugen mehrerer ähnlicher Domänen. Alles was Sie tun müssen ist, eine Domäne zu kopieren, die notwendigen Ändrungen vornehmen, kompilieren und abschließend commit anklicken.

Die Seite DDL im Domäneneditor zeigt die tatsächlich zur Erzeugung der neuen Domäne verwendete Anweisung an:

Domänen von einer Datenbank in eine andere kopieren

Wenn Sie bereits eine große Anzahl an Domänen in einer Datenbank erzeugt haben und Sie möchten diese in einer neuen Datenbank duplizieren, führen Sie einfach folgende Schritte in IBExpert durch:

  1. Kopieren Sie die DLL (Data Definition Language) der Domäne in den SQL Editor ein und führen Sie diese aus.
  2. Ziehen Sie die Domäne von der Quelldatenbank in den Domäneneditor der Zieldatenbank.

Siehe auch:
deutschsprachig:
Feld
englischsprachig:
CREATE DOMAIN
DDL - Data Definition Language

Syntax freundlicherweise zur Verfügung gestellt von IBPhoenix (https://www.ibphoenix.com)

zurück zum Seitenanfang
<< Datenbankobjekte | IBExpert | Tabelle >>