phpbar.de logo

Mailinglisten-Archive

[php] key und arrays

[php] key und arrays

Manuel_Hossfeld_(at)_csi.com Manuel_Hossfeld_(at)_csi.com
Wed, 2 Jun 1999 13:57:50 +0200 (MEST)


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