*Markus: Theoretische Frage zu Indizes

Beitrag lesen

Hallo,

  1. Normalform bedeutet auf keinen Fall, dass man nur nach Primärschlüsseln suchen darf.

Das weiß ich natürlich. Es ergibt sich aber in meinem Fall so.

Vielleicht schaust du dir nocheinmal genauer an, wie Normalformen genau definiert sind, und wieso sie dies sind (Überhaupt nicht böse gemeint - es ist nicht sonderlich einfach!)

Davon kann ich ein Liedchen singen :)

Die zu implementierende Suche der Webapplikation wird aber aus vielen Einzeltabellen die Daten zusammenglauben, d.h zB

Aus Tabelle A den Eintrag 3
Aus Tabelle B den Eintrag 2
Aus Tabelle C den Eintrag 7
Aus Tabelle D den Eintrag 5
Habe ich es richtig verstanden, dass du eine Tabelle mit den Daten hast, die Foreign Keys zu A,B,C,D enthält, und du nach diesen suchen möchtest?

Nein sorry, ich glaube auch, dass ich einen Denkfehler gemacht habe. Ich dachte, man könne einen Index anlegen, der von verschiedenen Tabellen Werte "verbindet", so etwas wie ein "hartkodierter Join" wenn man so will.
Ich hatte nämlich die ganze Zeit den Gedanken im Kopf, dass ein Index ja im Prinzip eine Tabelle mit Referenzen ist.
Da das wahrscheinlich sowieso so nicht funktioniert, hätte sich meine Frage sowieso erübrigt, außer, ich wisst vielleicht etwas, das ich nicht weiß.

Jetzt meine Frage dazu:
Ist die Suche so eigentlich effizient, wenn die Indizes Tabelle für Tabelle gesetzt sind (wie sie aufgrund des PK ohnehin sind), oder wäre es noch effizienter, wenn ich einen Index so anlege, dass ich sage, dass "Index XYZ aus PK / TabA, PK / TabB, PK / TabB, PK / TabC" besteht, also ein zusammengesetzter Index aus den Primärschlüsseln von 4 Einzeltabellen sozusagen?
Falls dem so ist, wie verhält sich das DBMS, wenn ich irgendwann nur doch nach 3 Werten dieser 4 aus dem zusammengesetzten Index suchen muss?
Geht das DBMS dann so vor, dass es erst wieder die Einzelindizes abfragt, oder nimmt das DBMS trotzdem den zusammengesetzten Index, da ja hier bereits 3 der 4 Werte "zusammen gespeichert" sind?
Alle diese Fragen kann man nicht allgemein beantworten - sie sind abhängig vom jeweiligen Datenbanksystem.

Welches verwendest du denn?

Ich vergaß zu erwähnen. Ich verwende PostgreSQL.

Markus