Exkurs - Nullwerte und Wertebereich
Undefinierte Werte
Vielleicht ist dir bei dem SQL-Befehl zur Ausgabe der Mainzer Benutzer ein seltsamer Datenwert aufgefallen:
SELECT Vorname, Name, GebDat
FROM benutzer
WHERE Ort = 'Mainz'
In einigen Datensätzen steht für das Attribut GebDat der Wert NULL
. Dieses ist
aber ein Attribut mit dem Datentyp "Datum", so dass keine Texte dort erlaubt sind?!
Wenn für ein Attribut kein Wert definiert ist, dann wird der vordefinierte Wert NULL angenommen. Dieser stellt keinen Text dar, sondern ist ein Platzhalter für den undefinierten Wert.
In Bedingungen kann der Wert NULL explizit abgefragt werden, z.B. WHERE GebDat IS NULL
bzw.
WHERE GebDat IS NOT NULL
(für alle Werte, die kein NULL enthalten).
Nicht alle Benutzer haben also ihr Geburtsdatum im sozialen Netzwerk hinterlegt. Mache dir klar, warum man nicht irgendein bestimmtes Datum (z.B. 1.1.1990) für ein unbekanntes Geburtsdatum abspeichern sollte.
Jetzt kannst du den SQL-Befehl oben sicher so verbessern, dass du alle Mainzer Benutzer findest, bei denen kein Datum angegeben wurde.
Wertebereiche
Warum speichert man eigentlich nicht alles in der Datenbank in Attributen mit dem Datentyp "Text"?
In einem Versuch wurden die Geburtstage einmal als Text gespeichert.
Ein SQL-Befehl gibt jetzt die Benutzer aus und zwar nach dem Geburtstag sortiert.
Kannst du die seltsame Sortierung erklären?
Der Wertebereich eines Attributes hat gravierende Auswirkungen vor allem auf die Sortierung von Datensätzen. So werden Datumsangaben als "Texte" auch wie diese sortiert (also ist 01.01.2014 kleiner als 31.12.1970, da 3 nach 0 kommt). Auch generell bei Zahlen spielt das eine Rolle (als Text ist dann 42 größer als 1134). Für Textfelder kann sogar die Art der Sortierung angegeben werden, die sich von Land zu Land unterscheiden kann.
Recherchiere doch einmal, welche Unterschiede allein die deutschsprechenden Staaten in Bezug auf die alphabetische Sortierung machen!