Mailinglisten-Archive |
> folgendes Problem: > Ich speichere in einer Tabelle ab, wie ein Kunde von uns erfahren hat. > Mehrfachauswahlen sind dabei möglich. Die Angaben werden per > Komma getrennt > in einem einzelnen Feld gespeichert. Ansonsten wäre ich recht > unflexibel und > müsste für jede Möglichkeit ein eigenes enum anlegen. > > Beispiel: > user know > 1 1,3,6 > 2 2 > 3 1,2 > 4 6 das ist relational-datenbanktheoretisch schlecht (und auch praktisch schlecht, wie du selber gerade erfährst) ... dieses beispiel ist exemplarisch für eine n-zu-m-beziehung, der sauber mit 3 tabellen zu lösen ist: tabelle user (user_id, username, etc....) tabelle know (know_id, know_beschreibung) tabelle user_know (user_id, know_id) aus deinem beispiel resultiert folgende tabellenbelegung: user **** user_id, username, ... 1 meyer 2 müller 3 krause 4 arnold know **** know_id, know_beschreibung 1 aus der zeitung 2 aus der tv-werbung 3 über einer suchmaschine 6 von einem freund user_know ********* user_id, know_id 1 1 1 3 1 6 2 2 3 1 3 2 4 6 die darstellung mit 3 tabellen ist nicht nur db-theoretisch sauber, sondern ermöglicht sehr einfach das gruppieren (eine sql-anweisung), wie du sie brauchst. darüber hinaus kannst du mit dieser darstellung den formular-script dynamisch gestalten (bei deiner lösung ist die liste der "kennenlern-möglichkeiten" bestimmt fest-kodiert). die auswahlliste der "kennenlern-möglichkeiten" kannst du dynamisch erstellen aus der tabelle know. der vorteil: ändert sich die tabelle, etwa durch hinzufügen einer weiteren "möglichkeit", dann ist die änderung automatisch im formular drin. du kannst natürlich auch aus deiner struktur die gewünschte gruppierung realisieren -- jedoch nicht mit einer sql-anweisung und fertig, sondern mit einem script, der die komma getrennten daten als solche interpretiert und entsprechend gruppiert. ich empfehle daher, das problem mit 3 tabellen (n-m) zu lösen. ich weiß, es ist nervig sowas nachträglich zu ändern, aber glaube mir, mit einer unkorrekten datenstruktur hast du langfristig nur ärger. gruß julián daniel
php::bar PHP Wiki - Listenarchive