Postgresql permite que você defina uma chave primária usando um grupo de colunas em vez de uma, se desejar, assim:
PRIMARY KEY(a_id, b_id)
Mas será que a ordem das colunas nesta definição é significativa? Existe alguma diferença prática ou real entre o acima e o abaixo:
PRIMARY KEY(b_id, a_id)
A documentação não aborda isso diretamente. Isso implica que a ordem não deve ser significativa e, quando consulto as tabelas information_catalog, não vejo nada que note a diferença na ordem dos parâmetros.
Mas usar o \d
comando em duas tabelas usando as definições alternativas e a ordem das colunas conforme descrito na saída muda. Aparentemente há algo pg_catalog
que mantém a ordem da definição da chave primária, mas isso implica que existe alguma diferença funcional entre as duas definições?
Obrigado
Responder1
Mas será que a ordem das colunas nesta definição é significativa? Existe alguma diferença prática ou real entre o acima e o abaixo:
A ordem das colunas PRIMARY KEY
é significativa porque o UNIQUE
índice da árvore b subjacente é criado com os atributos nessa ordem e isso afeta a eficiência da pesquisa do índice. Geralmente, você deseja primeiro os atributos mais seletivos. Isso afeta apenas o desempenho, não altera o significado das consultas.
Não hásemânticodiferença, porque UNIQUE (a, b)
implica UNIQUE (b,a)
.