Hoe zit het met het regelen van wat er in de tabel komt, zodat u altijd het kleinste getal opslaat in de eerste kolom en het grootste in de tweede? Zolang het maar hetzelfde 'betekent' natuurlijk. Het is waarschijnlijk goedkoper om het te doen voordat het zelfs maar in de database komt.
Als dit niet mogelijk is, kunt u de velden opslaan zoals ze zijn, maar ze in numerieke volgorde laten dupliceren in twee ANDERE velden, waarop u de primaire sleutel (pseudo-code-achtig) zou maken:
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 )
Dit kan eenvoudig worden gedaan met een trigger (zoals in de reactie van Ronald) of hoger in de applicatie worden afgehandeld.