En mysql, la única forma que se me ocurre es agregar un par de columnas de utilidad como
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
y agregue un par de activadores que establezcan u0
y u1
al menor y al mayor de los dos:
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);
luego agrega un índice único en (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
Y ahora obtendrá un error al intentar insertar un par duplicado independientemente del orden.
En un RDBMS decente como PostgreSQL
podría usar el índice en la expresión:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Entonces, cámbiate antes de que sea demasiado tarde;-)