Tabellen anlegen
Dieses Kapitel gehört zum Leistungskurs.
CREATE TABLE
Führe die Anweisung aus. Sieh dir danach den Datenbankbaum links an.
a) Was hat sich dort verändert?
b) Führe die Anweisung ein zweites Mal aus. Was passiert?
c) Drücke Datenbank Reset. Ist die Tabelle noch da?
Datentypen wählen
| Datentyp | wofür | Beispiel |
|---|---|---|
INTEGER |
ganze Zahlen, auch für Schlüssel und Wahrheitswerte | kapazitaet INTEGER |
REAL |
Kommazahlen | gewicht REAL |
DECIMAL(p,s) |
Kommazahlen mit fester Stellenzahl – für Geldbeträge | preis DECIMAL(6,2) |
TEXT |
Text beliebiger Länge | beschreibung TEXT |
VARCHAR(n) |
Text bis n Zeichen |
name VARCHAR(80) |
CHAR(n) |
Text mit genau n Zeichen |
laendercode CHAR(2) |
DATE |
Datum | gruendungstag DATE |
DATETIME |
Datum mit Uhrzeit | gekauft_am DATETIME |
BOOLEAN |
Wahrheitswert | ueberdacht BOOLEAN |
SQLite nimmt es mit Datentypen ungewöhnlich locker: Es speichert in einer INTEGER-Spalte klaglos einen Text. Andere Systeme weisen das zurück.
Verlass dich also nicht darauf, dass die Datenbank dich vor falschen Werten schützt – aber schreibe trotzdem den richtigen Typ hin. Er dokumentiert deine Absicht, er wird auf anderen Systemen durchgesetzt, und er entscheidet darüber, wie sortiert wird: '10' steht als Text vor '9', als Zahl dahinter.
Welchen Datentyp würdest du wählen? Begründe kurz.
a) eine Postleitzahl
b) ein Geldbetrag in Euro
c) eine Telefonnummer
d) die Angabe, ob ein Kurs ausgebucht ist
e) eine ISBN
f) die Zahl der Teilnehmenden
Tipp
Die Prüffrage lautet nicht „sind das Ziffern?", sondern: Rechnet man damit? Was man nicht addiert und nicht sortiert wie eine Zahl, ist Text.
Ein vollständiges Schema umsetzen
Der Fahrradverleih aus Kapitel 5:
station(station_id, name, adresse, stellplaetze)
fahrrad(rahmennummer, typ, anschaffungsjahr, station_id→station)
kundin(kundin_id, name, geburtsdatum, email)
ausleihe(ausleih_id, rahmennummer→fahrrad, kundin_id→kundin, start, ende, preis)
Die Reihenfolge ist wichtig: Eine Tabelle kann nur auf eine Tabelle verweisen, die es schon gibt. Also erst station, dann fahrrad.
Die IDE prüft deinen Text gegen die Tabellen, die es im Moment gibt. Solange station noch nicht angelegt ist, markiert sie die FOREIGN KEY-Zeile in fahrrad als Fehler.
Führe die Anweisungen der Reihe nach aus – nach dem ersten CREATE TABLE verschwindet die Meldung von selbst.
a) Führe beide Anweisungen nacheinander aus.
b) Ergänze die beiden fehlenden Tabellen kundin und ausleihe. Wähle für jedes Attribut einen passenden Datentyp.
c) Warum muss ausleihe als Letztes angelegt werden?
Tipp 1: Gerüst für kundin
CREATE TABLE kundin (
kundin_id INTEGER PRIMARY KEY,
name VARCHAR(80) NOT NULL,
geburtsdatum DATE,
email VARCHAR(120)
);
Tipp 2: Zwei Fremdschlüssel in einer Tabelle
Es dürfen mehrere FOREIGN KEY-Zeilen untereinander stehen. Jede bekommt ihre eigene Zeile am Ende der Tabellendefinition.
Von der Kardinalität zur Tabellendefinition
Die Angaben aus dem ER-Diagramm landen an ganz bestimmten Stellen:
| im Modell | in CREATE TABLE |
|---|---|
| Entitätstyp | eine CREATE TABLE-Anweisung |
| Schlüsselattribut | PRIMARY KEY |
| 1:n-Beziehung | FOREIGN KEY auf der n-Seite |
| n:m-Beziehung | eigene Tabelle mit zusammengesetztem PRIMARY KEY |
| Minimalangabe 1 | NOT NULL auf dem Fremdschlüssel |
| Minimalangabe 0 | kein NOT NULL |
| Attribut mit eindeutigen Werten | UNIQUE (spalte) |