Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer un index unique "recto-verso" sur deux champs ?

Que diriez-vous de contrôler ce qui entre dans le tableau afin de toujours stocker le plus petit nombre dans la première colonne et le plus grand dans la seconde ? Tant que cela "signifie" la même chose bien sûr. Il est probablement moins coûteux de le faire avant même qu'il n'arrive dans la base de données.

Si cela est impossible, vous pouvez enregistrer les champs tels quels mais les faire dupliquer par ordre numérique dans deux champs OTHER, sur lesquels vous créerez la clé primaire (pseudo code-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 )

Cela pourrait facilement être fait avec un déclencheur (comme dans la réponse de Ronald) ou géré plus haut, dans l'application.