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 \d
Befehls 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_catalog
dem die Reihenfolge der Primärschlüsseldefinition erhalten bleibt. Bedeutet dies jedoch, dass es überhaupt einen funktionalen Unterschied zwischen den beiden Definitionen gibt?
Danke
quelle
Antworten:
Die Reihenfolge der Spalten in der
PRIMARY KEY
ist insofern von Bedeutung, als der zugrunde liegendeUNIQUE
B-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)
impliziertUNIQUE (b,a)
.quelle