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-
 
Search WWH ::




Custom Search