Moin moin,
ich knobele gerade an der optimalen Abbildung folgenden Sachverhaltes und würde mich über Hilfestellung sehr freuen:
Meine Datenbank erfasst in einer Tabelle 'tour' gefahrene Touren mit Angaben wie Absender, Empfänger und Preis.
1. Tabelle 'tour' mit Spalten
'id', 'datum', 'absender', 'empfaenger', 'preis'
Nun soll die Möglichkeit hinzukommen, einer Tour eine oder mehrere Besonderheiten zuzuordnen. Eine Besonderheit ist z.B. die Benutzung der Hebebühne oder des Hubwagens.
2. Tabelle 'besonderheit' mit Spalten
'id', 'name'
Datensätze z.B. 'hebe' und 'hub'
Ich habe dort eine m-zu-m-Beziehung, da eine Tour mehrere Besonderheiten haben kann und eine Besonderheit bei mehreren Touren vorkommen kann. Der Normalisierung folgend behebe ich diese Beziehung durch das Erstellen einer Verbindungsentität 'tourbesonderheit':
3. Tabelle 'tourbesonderheit' mit Spalten
'id', 'tour_id', 'besonderheit_id'
Dies scheint mir aus Sicht der Datenstruktur die optimale Lösung. Nur leider blicke ich nicht, wie ich die Abfrage dazu passend gestalten kann. Das Ergebnis der Abfrage soll z.B. die Liste aller Touren eines Tages mit den Eigenschaften sein, also vereinfacht etwa so:
Datum | absender | empfaenger | preis | hebe | hub
--------------------------------------------------------
11.01 | hein | klaas | 15 | | x
11.01 | pit | jan | 25 | x |
11.01 | mary | ann | 52 | x | x
Die Schwierigkeit hierbei ist für mich, daß in den Spaltenüberschriften alle Besonderheiten auftauchen sollen. Es gibt keine feste Anzahl an Besonderheiten. Es können neue dazukommen. Also müßten die Zeilen der Tabelle 'besonderheit' ausgelesen werden und als Spaltenüberschrift des Ergebnisses der Abfrage verwendet werden. Ob sowas überhaupt mit einer mySQL-Abfrage möglich bzw. sinnvoll ist, weiß ich nicht. Selbst die vergleichbar einfache Abfrage: gib mir alle Touren vom 11.01 mit der Besonderheit 'hub' blicke ich nicht, da ich ja über die Tabelle 'tour' weiter über 'tourbesonderheit' zur Tabelle 'besonderheit' kommen muß. Ach, haariges Zeug, dieses SQL.
Ich habe daraufhin gedanklich wieder zurückgerudert und dachte, ich füge der Tabelle 'tour' einfach stumpf ein Feld 'besonderheit' an. In dieses Feld schreibe ich dann die Namen der Besonderheit hintereinander weg und kann diese dann mit %LIKE% abfragen. Aber das ist irgendwie auch bääh. Also so würde das dann aussehen:
1. Tabelle 'tour' mit Spalten
'id', 'datum', 'absender', 'empfaenger', 'preis', 'besonderheit'
2. Tabelle 'besonderheit' mit Spalten
'id', 'name'
Abfrageergebnis:
Datum | absender | empfaenger | preis | besonderheit
--------------------------------------------------------
11.01 | hein | klaas | 15 | hub
11.01 | pit | jan | 25 | hebe
11.01 | mary | ann | 52 | hebe hub
Diese Version würde mir das Leben erstmal einfacher machen, wobei ich es unsauber finde und mir auch vorstellen kann, daß mich dieser Vorteil irgendwann später wieder einholt und zu einem großen Nachteil mit Anomalien wird.
Mir bliebe die Möglichkeit, das Abfrageergebnis mittels mehrerer einzelner mySQL-Querys und Perl zusammenzustückeln. Nur dabei lerne ich nichts über SQL, und daran hapert es bei mir. Ich könnte auch mit jeder neuen Besonderheit die Tabelle 'tour' um eine neue Spalte erweitern, aber das ist superbääh, weil damit sehr viele leere Spalten entstehen.
Ich würde mich sehr über Anregungen freuen
JOhnnY