[MySQL] Werte aus variabler Tabelle1 in Tabelle2 Felder speichern

Primus852

Gesperrt
Hallo zusammen,

ich stecke in einem (vermutlich rein logischem auf Grund mangelnder MySQL/DB-Erfahrung) Problem fest:

Folgendes Szenario:
2 Tables:

note_types (Hier werden Notiz-Typen gespeichert)
id|note_short|note_long

or_reservation (Hier werden Zimmer-Reservierungen abgespeichert)
id|guest_name|...|...|note_id|note_text|...|random_field

Die verschiedenen Notiz-Typen können vom Admin beliebig erweitert werden. Der Benutzer sieht die verschiedenen Notiz-Typen als Text-Area:

HTML:
<textarea name="notiz-typ1">Notiz-Text1</textarea>
<br />
<textarea name="notiz-typ2">Notiz-Text2</textarea>
<br />
etc...

Solange es zu jeder Textarea, bzw. zu jedem Notiz-Typ aus "note_types" ein Feld in "or_reservation" gibt ist das ja auch kein Problem (note_id_one|note_text_one / note_id_two|note_text_two / etc. je nachdem wieviele Types es gibt).

Wenn nun aber der Admin einen neuen Notiz-Typ hinzufügt, wie ist das Ganze dann zu behandeln, abzufragen?

Da ich wie gesagt eher Amateur in MySQL bin hier meine Ideen bisher (bitte brecht nicht zusammen):


  1. note_one_id & note_one_text bis x bereits erstellen (note_x_id/note_x_text)
    Nachteil: Ressourcenverschwendung, Begrenzung der Note-Types-Anzahl
  2. beim Hinzufügen von neuen Note-Types neues Feld in or_reservation erstellen
    Nachteil: PHP Abfrage/Insert kompliziert, evtl auch ineffizient/langsam (Types in note_types zählen und via foreach in PHP die SQL Query "on-the-fly" erstellen)
  3. In or_reservation nur ein Feld notes erstellen und dort alle Note-Types inkl. ID speichern ("1|Notiztext1----2|Notiztext2----3|Notiztext3"), beim Aufrufen doppelter explode/preg:match nach ID und Text.
    Nachteil: Sinn einer DB missverstanden?

Ich hoffe ich konnte mich verständlich ausdrücken und es gibt eine simple Lösung mit einem SQL-Befehl den ich nicht kenne. Wenn nicht freue ich mich auch über Empfehlungen für eine der 3 Lösungen bzw. Alternativen.

Ich habe das ganze Mal auf einem "Online-Whiteboard" zusammengefasst, falls der Text zu wirr ist.

Danke schonmal für's Lesen

cheers

PrimuS

download.png
 
Du brauchst eine dritte Tabelle, um diese N:M Beziehung zu modellieren.

reservation_notes:
reservation_id | note_id | note_text


note_id und note_text verschwinden jetzt aus or_reservation!


Deine drei Ideen sind im Prinzip genau die Ansätze, die man hat, bevor man die Relationale Datenbank verstanden hat. Das geht jedem am Anfang so. Es gibt leider auch im Beruf Leute, die alle drei Varianten produktiv einsetzen...was in aller Regel absolut unnötig und falsch ist.


Wenn du jetzt alle Notizen einer bestimmten Reservierung willst, musst du einen JOIN benutzen:

SQL:
SELECT			*
FROM			or_reservation AS r, note_types AS t, reservation_notes AS n
WHERE			r.id = 123
AND				r.id = n.reservation.id
AND				t.id = n.note_id
 
Spitze, vielen Dank, genau das meinte ich mit "logischem" Problem, bei allen 3 Ansätzen hatte ich das Gefühl ich missbrauche den Gedanken einer DB.

Vielen Dank.

cheers

PrimuS
 

Neue Beiträge

Zurück