Datenbankdesign schnell genug?

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 ...