Datenbankdesign schnell genug?
am 27.09.2006 14:43:41 von Martin Kaffanke
Hallo!
Ich hätte folgendes Design:
Tabelle A, B und C.
Tabelle A enthält einiges, jeder Datensatz aus A kann mehrere B's
enthalten, jedes B kann mehrere C's enthalten.
Die Häufigste Suche ist wohl, welche A's nun alle ein bestimmtes C
enthalten. Das führt zu einem Query wie:
WHERE
A.a_id = B.a_id
AND B.b_id = C.b_id
AND C.whatever = 132
Nun wird in Tabelle B eigentlich fast nie gesucht.
deshalb dachte ich, ich könnte auch ein Feld C.a_id anlegen, was aber zu
Redundanzen führt und ich daher nicht machen möchte, da es letztlich das
Speichern verkompliziert.
Wieviel Performanz würde es bringen, ein C.a_id anzulegen? Das query
wäre dann in diesem Fall:
WHERE
A.a_id = C.a_id
AND C.whatever = 132
Also ein JOIN weniger.
Wie löst man sowas?
Danke,
Martin
Re: Datenbankdesign schnell genug?
am 27.09.2006 14:54:47 von Christian Kirsch
Am 27.09.2006 14:43 schrieb Martin Kaffanke:
> Hallo!
>
> Ich hätte folgendes Design:
>
> Tabelle A, B und C.
>
> Tabelle A enthält einiges, jeder Datensatz aus A kann mehrere B's
> enthalten, jedes B kann mehrere C's enthalten.
>
Achtung, OT:
http://www.deppenapostroph.de/
> Die Häufigste Suche ist wohl, welche A's nun alle ein bestimmtes C
> enthalten. Das führt zu einem Query wie:
>
> WHERE
> A.a_id = B.a_id
> AND B.b_id = C.b_id
> AND C.whatever = 132
>
> Nun wird in Tabelle B eigentlich fast nie gesucht.
> deshalb dachte ich, ich könnte auch ein Feld C.a_id anlegen, was aber zu
> Redundanzen führt und ich daher nicht machen möchte, da es letztlich das
> Speichern verkompliziert.
>
> Wieviel Performanz würde es bringen, ein C.a_id anzulegen? Das query
> wäre dann in diesem Fall:
>
Warum probierst Du es nicht aus? Solche Fragen lassen sich doch nicht
beantworten, wenn man keinerlei Randbedingungen kennt (Tabellengröße,
Maschine etc.).
> WHERE
> A.a_id = C.a_id
> AND C.whatever = 132
>
> Also ein JOIN weniger.
>
> Wie löst man sowas?
>
Wenn Dir die Normalformen heilig sind: lass es so, wie es ist. M.E.
muss man sich nur um Performance Gedanken machen, wenn irgendwas
langsam ist. Ist die Abfrage langsam? *Wie* langsam? Was sagt
EXPLAIN SELECT ...