|
Mehrfachauswahl und Checkbox-Listen |
|
|
01.11.2009 Mehrfachauswahl und Checkbox-Listen Für dieses Beispiel benötigen Sie die Beispiel-Datenbank FAHRZEUGE und das Projekt fahrzeuge.xdev.
Mit einer gewöhnlichen Listbox lässt sich nur 1 Wert selektieren und speichern, z.B. ein Farbwert in einer Fahrzeug-Tabelle. Für manche Merkmale müssen jedoch mehrere Werte gespeichert werden, z.B. mehrere Extras für ein Fahrzeug wie Klima, Alu, Leder, Servo etc. Dafür lässt die Listbox auch eine Mehrfachauswahl zu, die Sie mit der Methode
» Werte der Mehrfachauswahl in neue Tabelle « Die Auswirkung einer Listbox-Mehrfachauswahl oder einer Checkbox-Liste auf das Datenmodell sind jedoch gravierend, da in einem korrekten relationalen Datenmodell nicht mehrere Werte in einem Datenfeld gespeichert werden dürfen. Zum Beispiel darf in einem Fahrzeug-Datensatz in einem Datenfeld EXTRAS_ID nur 1 ID abgespeichert werden. Damit könnte ein Fahrzeug immer nur 1 Extra besitzen. In der Praxis kann ein Fahrzeug jedoch viele viele Extras besitzen.
Das Problem kann nur mit Hilfe einer zusätzlichen Datenbank-Tabelle gelöst werden. Das Prinzip ist jedoch simpel. Gespeichert wird immer ein ID-Paar bestehend aus einer Fahrzeug-ID und einer Extra-ID. Für jedes Extra wird jeweils ein ID-Paar abgespeichert, sodass die Fahrzeug-ID mehrfach vorkommen kann und somit redundant gespeichert wird. Im Gegensatz zu redundanten Werten sind redundante IDs unproblematisch. Der Name der Tabelle wird i.d.R. aus den Namen der zusammen geführten Tabellen gebildet, z.B. FAHRZEUGE_EXTRAS. Mit dem Speichern der Extras in der neuen Tabelle FAHRZEUGE_EXTRAS, wird das Datenfeld EXTRAS_ID in der Tabelle FAHRZEUGE überflüssig und kann aus der Tabelle entfernt werden.
» Zusätzliche Speichern-Funktion « Das Speichern der Mehrfachauswahl in einer anderen Datenbank-Tabelle FAHRZEUGE_EXTRAS hat zur Folge, dass Sie dafür eine eigene Funktion zum Speichern benötigen. Dafür müssen Sie eine eigene Methode schreiben, welche die Fahrzeug-ID sowie die IDs aller gewählten Extras ermitteln und diese in der Datenbank-Tabelle FAHRZEUGE_EXTRAS abspeichern muss.
Datenbankabfrage:
|