MINT lernen

Typische Fehler

Zwölf Fehler, die in Datenbank-Klausuren immer wieder Punkte kosten — vom falsch gelesenen ER-Diagramm bis zum Vergleich mit NULL.

!

Die 12 häufigsten Fehler

1Kardinalität falsch herum gelesen

1nMannschaftMitgliedspieltIn

So wird oft gearbeitet: „Bei Mannschaft steht 1 — also hat eine Mannschaft ein Mitglied.“

Richtig ist: Die Zahl steht beim Partner: Ein Mitglied spielt in höchstens einer Mannschaft; eine Mannschaft hat beliebig viele Mitglieder (n bei Mitglied).

Zahl bei B = Höchstzahl der B-Partner einer A-Entität.

2Beziehungsattribut am Entitätstyp

nmTeilnehmerDisziplintrittAnLeistung

So wird oft gearbeitet: Leistung wird als Attribut von Teilnehmer modelliert.

Richtig ist: Die Leistung hängt von Teilnehmer und Disziplin ab — sie gehört an die Raute trittAn. Am Teilnehmer gäbe es nur einen Wert für alle Disziplinen.

Hängt ein Wert von zwei Partnern ab, hängt er an der Raute.

3Fremdschlüssel im ER-Diagramm

1nPflegerTierbetreut↑PflegerNr

So wird oft gearbeitet: Zusätzlich zur Raute bekommt Tier das Attribut ↑PflegerNr.

Richtig ist: Im ER-Modell stellt allein die Raute die Beziehung dar. Fremdschlüssel entstehen erst beim Überführen in das Relationenschema.

Im ER-Diagramm: Beziehung = Raute, nie ↑-Attribut.

4Das System als Entitätstyp

1nTierheimTierhat

So wird oft gearbeitet: Das Tierheim, dessen Datenbank modelliert wird, erscheint als eigenes Rechteck.

Richtig ist: Das System ist der Rahmen: Es gäbe genau eine Entität „Tierheim“, über die nichts weiter gespeichert wird. Solche Rechtecke fallen weg.

Entitätstyp nur für Dinge, von denen es viele mit eigenen Angaben gibt.

5Fremdschlüssel auf der 1-Seite

Mannschaft(Bezeichnung, Liga, MitgliedNr)

So wird oft gearbeitet: Bei Mannschaft 1 — n Mitglied kommt ↑MitgliedNr in die Tabelle Mannschaft.

Richtig ist: Eine Mannschaft hat viele Mitglieder — dafür bräuchte die Zelle viele Werte. Der Fremdschlüssel gehört auf die n-Seite: ↑Bezeichnung in Mitglied.

1:n → Fremdschlüssel wandert zur n-Seite.

6n:m als einzelner Fremdschlüssel

Kunde(KundenNr, Name, ReiseNr)

So wird oft gearbeitet: Die n:m-Beziehung „Kunde bucht Reise“ wird als ↑ReiseNr in Kunde umgesetzt.

Richtig ist: Ein Kunde kann nur noch eine Reise haben — oder er wird mehrfach gespeichert. n:m braucht eine eigene Tabelle bucht(KundenNr, ReiseNr).

n:m → immer eine Verbindungstabelle.

7Mindestzahl hineingelesen

1nKlasseSchuelergehoertZu

So wird oft gearbeitet: „Laut Diagramm muss jede Klasse mindestens einen Schüler haben.“

Richtig ist: Die Notation der Ergänzenden Hinweise legt nur Höchstzahlen fest. Eine leere Klasse oder ein Schüler ohne Klasse widerspricht dem Diagramm nicht.

1 heißt „höchstens eins“, n heißt „beliebig viele — auch keiner“.

8Nummerierte Spalten statt n:m

Kurs(KursNr, Titel, Kuerzel1, Kuerzel2)

So wird oft gearbeitet: Für Teamteaching wird eine zweite Spalte ↑Kuerzel2 angehängt.

Richtig ist: Die Kardinalität hat sich geändert: aus 1:n wird n:m. Richtig ist eine Tabelle unterrichtet(KursNr, Kuerzel) — ohne NULL-Spalten und für beliebig viele Lehrkräfte.

Erst das ER-Modell korrigieren, dann neu überführen.

9Berechnete Werte gespeichert

Leser(LeserNr, Name, AnzahlAusleihen)

So wird oft gearbeitet: Die Zahl der Ausleihen wird als Attribut gepflegt, „damit man nicht zählen muss“.

Richtig ist: Der Wert lässt sich jederzeit mit COUNT berechnen. Gespeichert veraltet er bei jeder Ausleihe und erzeugt Widersprüche — eine Redundanz.

Was sich berechnen lässt, wird nicht gespeichert.

10Verbund ohne Verbundbedingung

SELECT Kunde.Name, Titel
FROM Kunde, Bestellung
WHERE Titel = 'Atlas';

So wird oft gearbeitet: FROM Kunde, Bestellung ohne Bedingung — „die Tabellen passen doch zusammen“.

Richtig ist: Ohne Kunde.KundenNr = Bestellung.KundenNr entsteht das Kreuzprodukt: Jeder Kunde erscheint bei jeder Atlas-Bestellung.

k Tabellen → k − 1 Verbundbedingungen.

11Aggregat in WHERE

SELECT KursNr, COUNT(*)
FROM belegt
WHERE COUNT(*) > 20
GROUP BY KursNr;

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

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

Zeilen filtert WHERE, Gruppen filtert HAVING.

12Vergleich mit = NULL

SELECT Name FROM Fahrer
WHERE TeamNr = NULL;

So wird oft gearbeitet: WHERE TeamNr = NULL soll Fahrer ohne Team finden.

Richtig ist: Ein Vergleich mit NULL ist nie wahr — das Ergebnis ist immer leer. Richtig: WHERE TeamNr IS NULL.

NULL prüft man mit IS NULL.