SQL-Tabelle zu verknüpfen... ist es besser eine Tabelle verknüpfen oder einer getrennten Spalte?

Meine Datenbank hat zwei Tabellen, eine enthält eine Liste von Benutzern, die andere eine Liste von Rollen. Jeder Benutzer gehört zu einer oder mehreren Rollen, und natürlich jede Rolle mehrere Benutzer.

Habe ich über zwei Möglichkeiten zum verknüpfen der Informationen. Die erste ist, um eine Dritte Tabelle enthält die ID aus beiden Tabellen. Ein einfacher join werden dann wieder alle Benutzer gehören einer Rolle oder alle Rollen, zu denen ein Benutzer gehört. Jedoch, da die Datenbank wächst, werden die Datensätze zurückgegeben, die durch diese einfache Abfragen wird exponentiell wachsen.

Die zweite Methode ist, um eine Spalte hinzuzufügen, um die Benutzer-Tabelle, in der eine durch Trennzeichen getrennte Liste von Rollen gelagert ist. Dies eliminiert den Bedarf für die Dritte Tabelle verknüpfen, die möglicherweise einen positiven Effekt auf die Vergrößerung der Datenbank. Der Nachteil ist, dass SQL nicht die Fähigkeit haben, verwenden Sie getrennte Listen. Die einzige Möglichkeit die ich gefunden habe, zum verarbeiten der Informationen ist die Verwendung einer temporären Tabelle und einer benutzerdefinierten Funktion.

Ist das betrachten meiner Ausführungspläne, die "table scan" - event ist die eine, die die meisten Ressourcen. Macht es Sinn, dass die Beseitigung einer Tabelle aus der Gleichung würde die Dinge beschleunigen. Die Funktion nimmt weniger als 1% der Ressourcen.

Diese tests wurden durchgeführt auf eine Datenbank mit weniger als 20 Datensätzen. Wie die Größe der Datenbank wächst, wird die Tabelle durchsucht wird länger dauern, so dass vielleicht begrenzen Sie ist die beste Wahl.

Wenn Sie das separierte Liste ist ein guter Weg zu gehen, warum ist niemand, es zu tun?

Mir bitte sagen, welche ist Ihre bevorzugte Methode sein (auch wenn es anders von meinen beiden) und warum.

Danke.

Nie testen Sie auf einer kleinen Menge von Daten, wenn Sie erwarten eine große Menge gelagert werden. Abfragen, die funktionieren auf kleine Datenmengen sind oft Hunde, die auf großen Datensätzen. Die reson youo habe die Tabelle scan war wohl, dass Sie hatten nur 20 Datensätze, Datenbanken, die nicht dazu neigen, Indizes verwenden, selbst wenn Sie existieren, für die eine Tabelle, die kleinen.
Sie sagen: "Aber, da die Datenbank wächst, werden die Datensätze zurückgegeben, die durch diese einfache Abfragen wird exponentiell wachsen." Ich kann mir nicht vorstellen, wie diese Aussage wahr sein könnte, auch wenn Sie hatte so viele Rollen wie Benutzer. Eine Abfrage der Rollen eines Benutzers ist begrenzt durch die Anzahl der Benutzer; Umgekehrt ist für Benutzer, die eine Rolle spielen. Ein Kreuzprodukt query wäre dein dataset im Quadrat: ein Polynom erhöhen, nicht zu einem exponentiellen.

InformationsquelleAutor RichieACC | 2010-01-21

Schreibe einen Kommentar