Databases Reference
In-Depth Information
select
*
from personen
where name is null
Wollen wir alle Personen ermitteln, deren Namen bekannt sind, geht das so:
select
*
from personen
where name is not null
Auch wenn
null
immer wieder eine Ursache für Fehler und Probleme ist, kommt
man in der Praxis nur sehr schlecht ohne diesen Repräsentanten des Unbekannten
aus. Die Diskussion über Sinn und Unsinn von
null
wird teilweise sehr akade-
misch geführt. Dennoch müssen wir die Hintergründe kennen, um die überra-
schenden Ergebnisse einzelner SQL-Anweisungen zu verstehen. Wir haben be-
reits gesehen, dass SQL uns
null
als Standardwert für unbekannte Werte anbie-
tet; wenn wir die Verwendung unterbinden wollen - um etwa mit eigenen Stan-
dardwerten zu arbeiten -, gibt es dazu mit
not null
eine eigene Integritätsregel:
create table personen(
id int primary key,
name varchar(20) not null default ''
)
Wenn es
null
aber nun schon einmal gibt, sollten wir auch einige Regeln für
Situationen zur Hand haben, in denen wir Verwendung zulassen oder verbieten:
Der Wert des Primärschlüssels repräsentiert genau einen Datensatz. In der Tabel-
le
spielkarten
aus Listing 5.5 repräsentiert jede Kombination aus
farbe
und
wert
genau eine Spielkarte. Wenn wir
null
hier zulassen, dann würden Kom-
binationen wie
(Karo, null)
auch genau eine Karte repräsentieren. Die Tabel-
le enthält also keinen zweiten Datensatz mit dem Primärschlüsselwert
(Karo,
null)
. Eine zweite Karte, von der nur der Farbwert Karo bekannt ist, gibt es
demnach nicht. Diese Einschränkung wirkt sehr künstlich.
Für den Primärschlüssel als Repräsentanten seines Datensatzes wird generell ge-
fordert, dass seine Attribute niemals
null
werden dürfen.
Definition: Entitätsintegrität
null
ist für kein Attribut eines Primärschlüssels zulässig.
Die Entitätsintegrität wird von SQL unterstützt. In Tabellen ist jedes Primärschlüs-
selattribut implizit mit einem
not null
Constraint versehen.
Die Argumentation, die wir für das Verbot von
null
für Primärschlüssel einge-
setzt haben, lässt sich so auch sinngemäß auf Schlüsselkandidaten übertragen.
Der SQL-Standard sieht hier allerdings vor, dass Attribute, die mit
unique
als At-