MySQL Struktur Datenbank

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

ich habe mehrere Dropdown-Boxen mit meist so 2-3 Einträgen.
Sollte man denn jede einzelne Box als eigene Tabelle anlegen und dann mit der Haupttabelle über einen Fremdschlüssel verknüpfen?

Mir erscheint es nicht so sinnvoll, die Werte aus dem Dropdown direkt in die Haupttabelle zu schreiben. (in dem Fall den Wert "Foo"), sondern den Fremdschlüssel zu nutzen.

<option value="1">Foo</option>

Da es viele Dropdowns sind, müsste ich natürlich dann einen Join über x-Tabellen ausführen, aber besser als den Wert direkt reinzuschreiben oder?
 
Da es viele Dropdowns sind, müsste ich natürlich dann einen Join über x-Tabellen ausführen, aber besser als den Wert direkt reinzuschreiben oder?
Schreibst du den Wert direkt rein, können Inkonsistenzen entstehen, wenn ein Wert geändert wird.

Wenn das wirklich nur 2-3 Einträge pro Tabelle sind, dann hat das DBMS die eh im Speicher und die JOINs sind fast geschenkt. (Wenn ich Müll erzähle, korrigiere mich bitte einer, der es besser weiß.)

Eine Alternative wäre noch, diese 2-3 Einträge alle in nur eine Tabelle zu schreiben. Bei den JOINs würde dann noch eine zusätzliche Spalte für die Unterscheidung anfallen. Klingt in meinen Augen aber ineffizienter, da die Anzahl der JOINs ja gleichbleibt, nur der Aufwand größer wird, um die Tabellen alle zu trennen, die jetzt alle in eine geklatscht wurden.
 
Kommt drauf an was Du vor hast.
-> geht es nur um die Darstellung?
-> wie und wohin sollen die gewählten Values gespeichert werden?

Kannst Du bei der "Aufgabe" etwas mehr ins Detail gehen?

Annahme:
Du willst eine Handvoll Dowpdown-Felder anzeigen, deren Werte sollen einem User zugeordnet werden (In dessen Datensatz gespeichert). Dann entweder a) die Inhalte der Felder gar nicht in der DB vorhalten sondern als Arrays in einem separaten File, oder b) diese doch als serialisiertes Array zusammen mit einem Identifier (z.b. Feldname im User-Datensatz) in der DB ablegen.

Die vielen JOINs reduzieren sich dann auf ein oder zwei SELECTs.

Wie gesagt, nur eine Annahme...ohne genaue Darstellung Deines Problems kann ich mir kein Bild von machen...

Gruß
 
Hi,

@TerraTux
es geht hier um einen Bestellvorgang. Der User kann dabei über die Dropdowns verschiedene Optionen anwählen, z.B. gibt es ein Feld das nennt sich Einzelverbindungsnachweis, und dort kann man wählen ob lang, kurz oder gar nicht. natürlich steht im Optionstext immer eine etwas genauere Beschreibung. Davon gibt es halt mehrere.
Ich habe auch schon an ein Textfile gedacht, aber die restlichen Daten der Bestellung stehen ja auch in einer Tabelle und wie ermittle ich dann die Daten, die über das Dropdown gewählt wurden, wenn der Rest in einem Textfile liegt? Mir fehlt also irgendwie die Zuordnung zu User-Datensatz

Du willst eine Handvoll Dowpdown-Felder anzeigen, deren Werte sollen einem User zugeordnet werden (In dessen Datensatz gespeichert). Dann entweder a) die Inhalte der Felder gar nicht in der DB vorhalten sondern als Arrays in einem separaten File, oder b) diese doch als serialisiertes Array zusammen mit einem Identifier (z.b. Feldname im User-Datensatz) in der DB ablegen.

Das wäre ja deine genannte Möglichkeit. Muss dann in den Arrays jeweils die zugehörige User-Id mit gespeichert werden?
 
Zuletzt bearbeitet:
Das wäre ja deine genannte Möglichkeit. Muss dann in den Arrays jeweils die zugehörige User-Id mit gespeichert werden?
Nein, aber die Auswahl im Datensatz der Bestellung...

z.B. hast du Dein Array:
Code:
$evn_ary = array(0 => 'Ohne', 1 => 'Kurz', 2 => 'Lang');

Deine Selectbox:
Code:
$evn_html = '<select name="evn">';
foreach ($evn_ary as $id => $name)
{
   $evn_html .= '<option value="'. $id .'">'. $name .'</option>';
}
$evn_html .= '</select>';


Die Auswahl (0, 1 oder 2) speicherst Du im Datensatz z.b.
Code:
$user['evn'] = $_POST['evn']; // natürlich nach Prüfung (Sicherheit)
Welchen Du in die DB hämmern kannst.

Zum Nachverfolgen, brauchst Du dann nur noch $evn_ary[$user['evn']] abzurufen und hast dann das Ergebnis Ohne, Kurz oder Lang.

Vorteil: Du kannst das recht einfach Mehrsprachig machen, wenn das Array in Sprachdateien untergebracht ist

Nachteil: bei 40 Select-Boxen hast du dann auch 40 ForEach-Schleifen
Da diese jedoch nicht auf jeder Seite generiert werden müssen, dürfte das auch zu vernachlässigen sein.

Gruß
 
Nachteil: bei 40 Select-Boxen hast du dann auch 40 ForEach-Schleifen
Da diese jedoch nicht auf jeder Seite generiert werden müssen, dürfte das auch zu vernachlässigen sein.
Gruß

Ok, jetzt wird mir klar wie du das gemeint hast :)
Dann brauche also für jede Selectbox eine Spalte in der DB, wo ich mir den Value speichere. (Bei meinen 5 Selectboxen wären das also 5 Spalten) :D
 
Naja schlimmstenfalls kannst du immer noch eine Gruppierungsspalte bauen so a la

OptionId | OptionGroup | OptionName
1 | Farbe | Blau
2 | Farbe | Rot
3 | Size | Small
4 | Size | Medium
5 | Size | Big
Einfachere select statements, wenig tabellen, nicht ganz normalisiert aber what the hell :p