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.
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> = {= | < | > | <= | >= | !< | !> | <> | !=}
Argument | Beschreibung |
---|---|
domain | Eindeutiger Domänen-Name. |
datatype | SQL-Datentyp. |
DEFAULT | Bestimmt 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 NULL | Bestimmt, 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. |
VALUE | Platzhalter für den Namen einer auf der Domänen basierten Spalte. |
COLLATE collation | Bestimmt die Sortierreihenfolge für die Domäne. |
Zum Beispiel:
CREATE DOMAIN MATCHCODE AS INTEGER DEFAULT 999999 NOT NULL CHECK (VALUE > 100000);
Ä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> = {= | < | > | <= | >= | !< | !> | <> | !=}
Argument | Beschreibung |
---|---|
name | Name der Domäne. |
SET DEFAULT | Bestimmt 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 DEFAULT | Lö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 CONSTRAINT | Löscht die CHECK -Beschränkung von der Domänendefinition. |
new_col_name | Ändert den Domänennamen. |
TYPE data_type | Ändert den Domänen-Datentyp. |
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.
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:
- Kopieren Sie die DLL (Data Definition Language) der Domäne in den SQL Editor ein und führen Sie diese aus.
- 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 >>