В mysql единственият начин, за който се сещам, е да добавя няколко колони за помощни програми като
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
и добавете няколко тригера, които задават u0
и u1
до най-малкото и най-голямото от двете:
CREATE TRIGGER uinsert BEFORE INSERT ON tbl_challenger
FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
NEW.u1 = GREATEST(NEW.host,NEW.challenger);
CREATE TRIGGER uupdate BEFORE UPDATE ON tbl_challenger
FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
NEW.u1 = GREATEST(NEW.host,NEW.challenger);
след това добавяте уникален индекс към (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
И сега ще получите грешка при опит за вмъкване на дублирана двойка, независимо от реда.
На прилична RDBMS като PostgreSQL
ще можете да използвате индекс за израз:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Така че, превключете, преди да е станало твърде късно;-)