Databases Reference
In-Depth Information
gibt. Hier sehen wir den Einsatz der beiden logischen Operationen
not
und
and
. Da in diese Regel zwei verschiedene Attribute eingehen, müssen wir sie
losgelöst von den Spalten definieren.
SQL verfügt über eine Vielzahl von Funktionen und Operatoren, mit denen wir
uns in Kapitel 11 noch intensiver auseinandersetzen. Wenn wir die Spalte
email
wie folgt definieren
email varchar(20) unique check(0<position('@',email))
stellen wir sicher, dass alle E-Mail-Adressen auch ein
@
-Zeichen enthalten. Die
Funktion
position
liefert die Position des
@
-Zeichens im Text und 0, wenn das
@
-Zeichen nicht auftritt. Wir werden aber in Kapitel 10 noch weitere, mächtigere
Möglichkeiten kennenlernen, um Muster für Texte zu formulieren. Als Voraus-
blick sei der
in
-Operator erwähnt. Mit seiner Hilfe können wir die Regel
check(geschlecht = 'W' or geschlecht = 'M')
zu
check(geschlecht in ('W', 'M'))
verkürzen. Zwischen den Klammern steht eine Liste von Werten. Der Operator
in
liefert den Wert
true
, wenn der Wert auf seiner linken Seite mit mindestens einem
der Elemente der Liste auf der rechten Seite übereinstimmt. Den
in
-Operator ha-
ben wir bereits in Beispielen für die Anweisung
create domain
genutzt (siehe
Abschnitt 5.3).
5.12
Es muss nicht immer statisch sein
Wir können bei Spalten wie
geschlecht
fragen, ob wir nicht besser die referenzi-
ellen Integritätsregeln anstatt statischer Regeln oder Wertebereiche nutzen sollen.
Die wie folgt definierte Tabelle
create table geschlechter(
id int generated always as identity primary key,
geschlecht varchar(1) unique
);
insert into geschlechter(geschlecht) values('M');
insert into geschlechter(geschlecht) values('W')
muss dann nur über einen Fremdschlüssel in der Tabelle
mitarbeiter
referen-
ziert werden. Das erledigen wir gleich in einem Aufwasch mit der Definition der
Spalte:
geschlecht int references geschlechter