MINT lernen

Typische Fehler

Zwölf Fehler, die in Datenbank-Klausuren immer wieder Punkte kosten — und wie man sie vermeidet.

!

Die 12 häufigsten Fehler

1Attribut mit Attributwert verwechselt

Farbe
rot
blau

So wird oft gearbeitet: „Das Attribut der Zeile R2 ist rot.“

Richtig ist: Farbe ist das Attribut (Spalte), rot ist der Attributwert in der Zeile R2.

Spalte = Attribut, Zelle = Attributwert.

2„Heute eindeutig“ als Schlüssel

NachnameGeburtsdatum
Weber12.03.2008
Schmidt05.11.2007

So wird oft gearbeitet: Nachname + Geburtsdatum als Primärschlüssel, weil in den Daten nichts doppelt ist.

Richtig ist: Ein Primärschlüssel muss für alle künftigen Datensätze eindeutig sein — Namen und Geburtstage können sich wiederholen.

Grundsätzlich eindeutig, nie NULL, unveränderlich — sonst künstliche Nummer.

3Fremdschlüssel soll eindeutig sein

SchuelerNr↑LehrerNr
S1L1
S2L1

So wird oft gearbeitet: „L1 kommt zweimal vor — das verletzt den Fremdschlüssel.“

Richtig ist: Fremdschlüsselwerte dürfen sich wiederholen: Viele Schüler haben denselben Lehrer. Eindeutig ist L1 nur in der Tabelle Lehrer.

Verweise dürfen mehrfach zeigen — nur nicht ins Leere.

4Mehrere Werte in einer Zelle

NameTelefon
Kaya0511 12, 0172 34

So wird oft gearbeitet: Zwei Telefonnummern durch Komma getrennt in einer Zelle.

Richtig ist: Jede Zelle ist atomar. Mehrere Nummern gehören in eine eigene Tabelle Telefon(↑PersonNr, Nummer).

Eine Zelle, ein Wert.

5Text ohne Hochkommas

WHERE Genre = Rennen;

So wird oft gearbeitet: WHERE Genre = Rennen

Richtig ist: WHERE Genre = 'Rennen' — ohne Hochkommas sucht SQL eine Spalte „Rennen“.

Texte in einfache Hochkommas, Zahlen ohne.

6= NULL statt IS NULL

WHERE FSK = NULL;

So wird oft gearbeitet: WHERE FSK = NULL soll Filme ohne Altersangabe finden.

Richtig ist: Vergleiche mit NULL sind nie wahr; richtig ist WHERE FSK IS NULL.

Fehlende Werte nur mit IS NULL bzw. IS NOT NULL prüfen.

7AND und OR ohne Klammern

WHERE Klasse = '10a' OR Klasse = '10b'
  AND Punkte >= 60;

So wird oft gearbeitet: Gemeint: „10a oder 10b, jeweils mit mindestens 60 Punkten“.

Richtig ist: AND bindet stärker: So gilt die Punktgrenze nur für 10b. Richtig: (Klasse = '10a' OR Klasse = '10b') AND Punkte >= 60.

Bei gemischtem AND/OR immer Klammern setzen.

8Verbundbedingung vergessen

SELECT Kunde.Name, Bestellung.Datum
FROM Kunde, Bestellung;

So wird oft gearbeitet: Das Ergebnis ist „erstaunlich lang“ — jede Kundin hat jede Bestellung.

Richtig ist: Ohne WHERE Kunde.KNr = Bestellung.KNr entsteht das Kreuzprodukt mit m · n Zeilen.

Je zwei verbundene Tabellen eine Verbundbedingung.

9Verbindungstabelle weggelassen

FROM Leser, Buch
WHERE Leser.LeserNr = Buch.BuchNr

So wird oft gearbeitet: Leser und Buch direkt über ihre Nummern verbunden.

Richtig ist: LeserNr und BuchNr bedeuten Verschiedenes. Der Weg führt über Ausleihe: zwei Verbundbedingungen.

Dem ↑-Pfeil im Schema folgen — nie zwei fremde Schlüssel vergleichen.

10Aggregat in WHERE

WHERE COUNT(*) > 2
GROUP BY Genre;

So wird oft gearbeitet: WHERE COUNT(*) > 2

Richtig ist: WHERE wirkt vor dem Gruppieren und kennt keine Anzahlen. Bedingungen an Aggregate gehören in HAVING.

Zeilen filtert WHERE, Gruppen filtert HAVING.

11Fremde Spalte im gruppierten SELECT

SELECT Name, AVG(Runden)
FROM Lauf
GROUP BY Klasse;

So wird oft gearbeitet: SELECT Name, AVG(Runden) … GROUP BY Klasse

Richtig ist: Pro Klasse gibt es eine Ergebniszeile — welcher Name sollte dort stehen? Im SELECT nur Gruppierungsattribute und Aggregate.

SELECT-Regel bei GROUP BY beachten.

12Pseudonym für anonym gehalten

CodeNote
S-04172
S-04184

So wird oft gearbeitet: „Die Namen sind durch Codes ersetzt, also gilt die DSGVO nicht mehr.“

Richtig ist: Solange die Zuordnungsliste existiert, sind die Daten pseudonym und personenbezogen — die DSGVO gilt weiter.

Anonym ist nur, was sich niemandem mehr zuordnen lässt.