Anatol: dreidimensionale Tabellen bei MySQL?

Hallo zusammen,

Ich erstelle gerade für einen Konzertveranstalter eine Webseite.
Das Veranstaltungsprogramm soll in eine Eingabemaske eingegeben
werden können. Ich wollte das ganze mit PHP und MySQL umsetzen. Hier
bin ich auf ein Problem gestoßen. Es gibt einige Spalten, bei denen
nicht festgelegt werden kann, wieviele Informationen enthalten sind.

Ein Beispiel: Bei der Veranstaltung A spielt der Künstler A Werke
von Bach, Mozart und Beethoven (=3 Komponisten), bei der Veranstaltung
B wird Schubert und Wagner gespielt (=2 Komponisten).

Ich will den Besuchern der Website die Möglichkeit geben, gezielt
nach einem Komponisten suchen zu können, woraufhin alle zutreffenden
Konzerte aufgelistet werden.
    Die einfachste Möglichkeit erscheint mir, eine "dreidimensionale"
Tabelle anzulegen. Ich stelle mir das in etwa so vor:

+---------------+--------------+---------------+---------------+----
veranstaltung kuenstler     komponist     usw           ...
+---------------+--------------+---------------+---------------+----
Veranst.1     Kuenstler 1   Komponist 1a   1            
Veranst.2     Kuenstler 2  +---------------+2            
+---------------+--------------+ Komponist 1b  --------------+----
                                +---------------+
                                + Komponist 1c  
                                 Komponist 2c  
                                 +---------------+

Ich kenne mich mit MySQL noch nicht gut aus, aber ich vermute,
dass das nicht möglich ist. Alternativ ist mir noch die Möglichkeit
eingefallen, statt dessen für jedes Konzert eine neue Tabelle zu
erstellen - das scheint mir aber nicht gerade die beste Möglichkeit
zu sein. Oder aber statt dieser einen Spalte mehrere anzulegen
(komponist1, komponist2, ...), wobei damit aber die Anzahl der Ein-
träge aber auf die Anzahl der Spalten beschränkt wäre. Natürlich
könnte man das im Falle dieser Website in Kauf nehmen. Die Stücke
von mehr als 10 Komponisten werden schon nicht in einem Konzert
gespielt werden. Mich interessiert aber generell eine Lösung, die
funktionieren würde, unabhängig von der Anzahl.

Wie würdet ihr das Problem lösen? Oder habe ich das Einfachste
übersehen? Für Tips wäre ich dankbar.

Viele Grüße,
Anatol

  1. Hallo!

    »»     Ein Beispiel: Bei der Veranstaltung A spielt der Künstler A Werke

    von Bach, Mozart und Beethoven (=3 Komponisten), bei der Veranstaltung
    B wird Schubert und Wagner gespielt (=2 Komponisten).

    Ja... also wie war das doch gleich mit der Normalform *gruebel*.

    Du brauchst 2 Tabellen:

    Konzerte)
    Konzert-Id, termin, ort, (und was du noch so brauchst)

    Kuenster)
    Konzert-Id, Kuenstler

    Wie unschwer zu erkennen, hast du in der 2ten Tabelle einen Eintrag
    pro Kuenstler und Konzert, also soviele Eintraege pro konzert wie
    du kuenstler hast. Auf die art und weise bekommst du beliebig viele
    Kuenster in ein Konzert.

    Wenn jemand nach kuenstlern sucht, suchst du in dieser tabelle und
    kannst anhand der konzert-id die ensprechende zeile in der ersten
    tabelle raussuchen.
    (Aufpassen wenn du mehrere treffer hast, evtl. select unique nehmen)

    Ich hoffe das hilft...

    P.S.: Gibt es ueberhaup jemanden in diesem Forum, der nicht webdesigner ist ?

    1. Hallo,

      und vielen Dank.

      Du brauchst 2 Tabellen:

      Konzerte)
      Konzert-Id, termin, ort, (und was du noch so brauchst)

      Kuenster)
      Konzert-Id, Kuenstler

      Manchmal sieht man den Wald eben vor lauter Bäumen nicht. Mit einer
      eindeutigen ID ist das Problem auch schon gelöst. Bisher hatte ich mit
      Datenbanken noch nichts zu tun, da arbeite ich mich gerade erst ein.
      Das ist die optimale Lösung dafür.

      Anatol

      1. Hallo,

        ganz perfekt ist es, wenn Du für die Künstler auch noch
        eine eigene Tabelle hast.

        Konzerte)
        Konzert-Id, termin, ort, (und was du noch so brauchst)

        Kuenstler1)
        Konzert-Id, Kuenstler-ID

        Kuenstler2)
        Kuenstler-ID, Kuenstlername

        Jetzt mußt Du nicht jedesmal z.B. Mozart eingeben,
        sondern nur z.B. die 1 für Mozart.

        Gruß