Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un indice univoco "a due lati" su due campi?

Che ne dici di controllare ciò che va nella tabella in modo da memorizzare sempre il numero più piccolo nella prima colonna e quello più grande nella seconda? Finché 'significa' la stessa cosa ovviamente. Probabilmente è meno costoso farlo prima ancora che arrivi al database.

Se ciò è impossibile, puoi salvare i campi così come sono ma farli duplicare in ordine numerico in due ALTRI campi, su cui creeresti la chiave primaria (pseudo-codice):

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 )

Questo potrebbe essere fatto facilmente con un trigger (come nella risposta di Ronald) o gestito più in alto, nell'applicazione.