W mysql jedynym sposobem, jaki przychodzi mi do głowy, jest dodanie kilku kolumn narzędziowych, takich jak
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
i dodaj kilka wyzwalaczy, które ustawiają u0
i u1
do najmniejszego i największego z dwóch:
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);
następnie dodajesz unikalny indeks na (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
A teraz pojawi się błąd podczas próby wstawienia zduplikowanej pary niezależnie od kolejności.
Na przyzwoitym RDBMS, takim jak PostgreSQL
mógłbyś użyć indeksu na wyrażeniu:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Więc zmień, zanim będzie za późno;-)