Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar um índice exclusivo 'duas faces' em dois campos?


Que tal controlar o que entra na tabela para que você sempre armazene o menor número na primeira coluna e o maior na segunda? Desde que 'significa' a mesma coisa, claro. Provavelmente é mais barato fazer isso antes mesmo de chegar ao banco de dados.

Se isso for impossível, você pode salvar os campos como estão, mas duplicá-los em ordem numérica em dois OUTROS campos, nos quais você criaria a chave primária (pseudo código-ish):
COLUMN A : 2
COLUMN B : 1

COLUMN A_PK : 1  ( if new.a < new.b then new.a else new.b )
COLUMN B_PK : 2  ( if new.b > new.a then new.b else new.a )

Isso pode ser feito facilmente com um gatilho (como na resposta de Ronald) ou manipulado mais acima, no aplicativo.