Mailinglisten-Archive |
Hi Amalesh, > [m:n Relationen über Hilfstabelle] > > Der einzig "saubere" weg in SQL. Kann ich nur unterschreiben... > Manchmal kann man aus bequemlichkeit in einem feld mehrere werte > durch komma getrennt eingeben, doch ist das nur bei kleinen > datenmodellen und relativ wenigen datensätzen empfehlenswert. Auch richtig. Was mich vor allem lange Zeit etwas genervt hat ist, daß man bei der "sauberen" Methode mit "richtigen" n:m-Beziehungen keine einfache Möglichkeit in SQL hat, die Ergebnismengen so aufzubereiten, wie man sie meist auch gerne lesen würde. Bsp.: Eine Tabelle Buch; ein Buch soll auch mehrere Autoren haben können. Wenn man das "korrekt" (wie oben gesagt) macht, erhält man auf eine Anfrage ("Gibt mir Buch mit ISBN 4711) dann erstmal eine Antwort wie z.B.: ISDN Titel Autor 4711 PHP ist toll Amalesh Kempf 4711 PHP ist toll Manuel Hoßfeld ...wohingegen man mit einem ISDN Titel Autor 4711 PHP ist toll Amalesh Kempf, Manuel Hoßfeld ... meist viel mehr anfangen könnte. Und wenn man nicht der totale SQL-Guru ist (ich bin´s jedenfalls nicht), der so eine Ausgabe schon auf Datenbankebene erreichen kann muß man dann halt auf Applikationsebene (sprich mit PHP) so dran "drumherum wurschteln", daß es eben so aussieht. > Um das korrekt in SQL abzubilden, müßte ich eigentlich eine > tabelle mit den email-adressen, eine mit den ländern und eine, die > die 1:m relation enthält, erstellen. Mmmh... Kann der User bei Deiner Anwendung nur EIN Land angeben? Dann ist es eine 1:n Beziehung und Du brauchst auch keine Hilfstabelle. Falls er mehrere angeben kann ist es natürlich n:m und Du brauchst eine... > Da eine neue party immer in einem land stattfindet, mache ich dann > ein einfaches > select * from emails where country like '%germany%' > und schon habe ich alles, was ich will. Ah, also doch mehrere Länder... > Nachteile: > - Die ländernamen dürfen sich nicht ändern > - Es kann nicht so einfach ein land gelöscht werden > - langsamer (was bei <2000 records aber kaum ins gewicht fällt) und: - man kann nicht gezielt auf einzelne Elemente (Länder) bzw. beliebige Kombinationen davon abfragen: Bsp: Ein SELECT ... WHERE country=("germany" or "france") geht nicht bzw. nur mit erhöhtem PHP-Aufwand CU, Manuel
php::bar PHP Wiki - Listenarchive