Sven Rautenberg: MySQL > Datenbank-Konzept m. relationaler Datenbank

Beitrag lesen

Moin!

tabelle leistungen mit drei spalten:

id  | kundennummer  |  leistung

1   | 101063        |  Golf
2   | 101133        |  Klettern
3   | 101213        |  Golf

Wo ist der Unterschied zwischen dem Golf in der ersten und in der dritten Zeile?

Antwort: Die Kunden 101063 und 101213 haben Golf als leistung gewählt. Der Unterschied ist nur die Kundennummer. wIE KANN ich jetzt die besprochene dritte Tabelle ansetzen? Darauf willst Du doch raus?!

Aber klar.

Und die Lösung ist simpel: Du brauchst eine Tabelle mit deinen Kunden und darin der Kunden-ID. Dann brauchst du eine Tabelle mit allen möglichen Leistungen und einer Leistungs-ID. Und die Tabelle, die du jetzt hast, wird geändert in eine mit zwei Spalten, die die Verbindung zwischen Kunden-ID und Leistungs-ID enthält.

Dann sparst du dir die ganzen Dopplungen in den Leistungsbezeichnungen, und kannst außerdem wirklich exakt abfragen, welche Kunden beispielsweise "Golf" als Leistung gewählt hatten - ohne in der Gefahr zu stehen, dass manchmal auch "Golfen" eingetragen werden könnte.

Und mithilfe von EXPLAIN und der entsprechenden Analyse, welche Zugriffe auf diese Verbindungstabelle entstehen, würdest du dann einen oder mehrere Indices setzen - ggf. auch über die zwei Spalten gemeinsam. Anbieten würde sich beispielsweise ein UNIQUE-Index über beide Spalten dann, wenn ein Kunde eine Leistung garantiert nur ein einziges Mal zugewiesen bekommen darf, also nur einmal Golf - nicht zwei oder dreimal.

Die komplette Liste ist die Werteliste, die kommt aus einer anderen Tabelle. Ist das jetzt die dritte von der du sprichst?!

Ich habe ja keine Ahnung, was du noch so an Tabellen hast. Bisher weiß ich von zwei Tabellen, und deren Inhalt. Und das, was ich weiß, gefällt mir hinsichtlich der Anforderung an übliches DB-Design nicht.

- Sven Rautenberg

--
"Love your nation - respect the others."