Postgresql ermöglicht Ihnen, bei Bedarf einen Primärschlüssel mithilfe einer Spaltengruppe statt einer einzigen zu definieren, und zwar wie folgt:
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 dem Obigen und dem Folgenden:
PRIMARY KEY(b_id, a_id)
Die Dokumentation geht nicht direkt darauf ein. Sie impliziert, dass die Reihenfolge nicht von Bedeutung sein sollte, und wenn ich die information_catalog-Tabellen abfrage, sehe ich nichts, was auf den Unterschied in der Parameterreihenfolge hinweist.
Wenn Sie den \d
Befehl jedoch auf zwei Tabellen mit den alternativen Definitionen anwenden, ändert sich die Reihenfolge der Spalten, wie sie in der Ausgabe beschrieben wird. Offensichtlich gibt es etwas, pg_catalog
das die Reihenfolge der Primärschlüsseldefinition beibehält, aber bedeutet das, dass es überhaupt einen funktionalen Unterschied zwischen den beiden Definitionen gibt?
Danke
Antwort1
Aber ist die Reihenfolge der Spalten in dieser Definition von Bedeutung? Gibt es einen praktischen oder tatsächlichen Unterschied zwischen dem Obigen und dem Folgenden:
Die Reihenfolge der Spalten ist insofern PRIMARY KEY
von Bedeutung, als dass der zugrunde liegende UNIQUE
B-Tree-Index mit den Attributen in dieser Reihenfolge erstellt wird, was sich auf die Effizienz der Indexsuche auswirkt. Im Allgemeinen möchten Sie die selektivsten Attribute zuerst haben. Dies wirkt sich nur auf die Leistung aus, ändert jedoch nicht die Bedeutung der Abfragen.
Es gibt keinSemantikUnterschied, weil UNIQUE (a, b)
impliziert UNIQUE (b,a)
.