Hallo,
wie auch immer, ich hätte vermutlich die eigenschaften haarfarbe nicht ausgelagert, auch nicht bei einer mehrsprachigkeit, wobei ich gestehen muss, mit daten-design für eine mehrsprachigkeit noch wenig zu tun hatte. ich hätte in der "stammtabelle" eine standardsprache ausgewählt, z.b. englisch, und je nach länderkennung mit einer unterabfrage die entsprechende sprache geholt. ich habe damit auch eine art trennung von funktionalität und design, bzw. ausgabe. nun aber was deine performance angeht.
Ich hätte es auch so gemacht, wenn ich keine Mehrsprachigkeit hätte. Je nachdem, welche Sprache ausgewählt ist, also zB de für Deutsch, joine ich zum Beispiel einfach die Nummer 3 für blond aus "Profil" mit der Tabelle Haarfarbe und selektiere "haarfarbe_de". Mit anderen Worten, das Sprachkürzel (de, en, etc..) wird immer dem Attributnamen der Tabelle vor dem Selektieren drangehängt. Zumindest plane ich es so zu machen.
Angenommen ich würde oft nach Haarstil, Haar, und Haarfarbe in "Profil" suchen wollen, ist ein zusätzlicher Index über alle 3 FKs zu legen, oder genügt hier der Index, der ja schon bei genau diesen Attributen als PK angelegt wurde?
da scheint mir noch ein verständnisproblem von deiner seite vorzuliegen. ein PK ist grundsätzlich immer indiziert. allerdings reicht dies nicht aus, wenn du einen join bildest. PK und FK bilden ja immer ein schlüsselpaar. insofern brauchst du auch auf der FK seite entsprechende indexe. pauschlaf kann man sagen, FK sind schonm al gute kandidaten für indexe.
Ok. Also das Einfügen von Werten ist bei dieser Tabelle absolut zweitrangig, da hier andauernd abgefragt werden wird, und nur selten aktualisiert oder eingefügt wird.
Wie würde ein Index auf den FK helfen, wenn ich folgende Abfrage hätte:
SELECT haarfarbe_de, haarstil_de
FROM Haarfarbe
INNER JOIN Profil
ON Profil.haarfarbe = Haarfarbe.haarfarbe
INNER JOIN Haarstil
ON Profil.haarstil = Haarstil.haarstil
WHERE profil_id = '1234567';
Wäre es jetzt sinnvoll gewesen, wenn diese beiden FKs zwei einzelne Indizes wären, oder wäre in diesem Fall ein zusammengesetzter Index besser?
Und wenn jetzt nur die Haarfarbe selektiert werden würde, und das DBMS hätte diesen zusammengesetzten Index zur Verfügung, wäre das dann massiv schlechter, wäre es genauso gut, wie wenn ein einzelner Index auf dieses Attribut gesetzt hätte, oder wäre es besser?
Mir ist nämlich noch nicht so ganz klar, wie das DBMS hier vorgeht.
Markus