Ist die Reihenfolge der Spalten in einer Postgresql-Primärschlüsseldefinition von Bedeutung?


2

Mit Postgresql können Sie einen Primärschlüssel mit einer Gruppe von Spalten anstelle einer definieren, wenn dies gewünscht wird. Beispiel:

PRIMARY KEY(a_id, b_id)

Aber ist die Reihenfolge der Spalten in dieser Definition von Bedeutung? Gibt es einen praktischen oder tatsächlichen Unterschied zwischen oben und unten:

PRIMARY KEY(b_id, a_id)

Die Dokumentation spricht dies nicht direkt an. Dies impliziert, dass die Reihenfolge nicht signifikant sein sollte, und wenn ich die information_catalog-Tabellen abfrage, sehe ich nichts, um den Unterschied in der Parameterreihenfolge zu bemerken.

Die Verwendung des \dBefehls für zwei Tabellen unter Verwendung der alternativen Definitionen und der Reihenfolge der Spalten, wie in der Ausgabe beschrieben, ändert sich jedoch. Anscheinend gibt es etwas, bei pg_catalogdem die Reihenfolge der Primärschlüsseldefinition erhalten bleibt. Bedeutet dies jedoch, dass es überhaupt einen funktionalen Unterschied zwischen den beiden Definitionen gibt?

Danke


Haben Sie ein einfaches Experiment durchgeführt, um die Antwort zu finden? Es ist nicht schwer, es selbst herauszufinden.
Julian Knight

Antworten:


2

Aber ist die Reihenfolge der Spalten in dieser Definition von Bedeutung? Gibt es einen praktischen oder tatsächlichen Unterschied zwischen oben und unten:

Die Reihenfolge der Spalten in der PRIMARY KEYist insofern von Bedeutung, als der zugrunde liegende UNIQUEB-Tree-Index mit den Attributen in dieser Reihenfolge erstellt wird und die Effizienz der Indexsuche beeinflusst. Sie möchten im Allgemeinen zuerst die selektivsten Attribute. Dies wirkt sich nur auf die Leistung aus und ändert nicht die Bedeutung von Abfragen.

Es gibt keinen semantischen Unterschied, weil UNIQUE (a, b)impliziert UNIQUE (b,a).


1
Vielen Dank, das war genau die Art von Antwort, nach der ich gesucht habe.
Radmilla Mustafa

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.