Di mysql, satu-satunya cara yang dapat saya pikirkan adalah menambahkan beberapa kolom utilitas seperti
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
dan tambahkan beberapa pemicu yang mengatur u0
dan u1
ke terkecil dan terbesar dari keduanya:
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);
kemudian Anda menambahkan indeks unik pada (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
Dan sekarang Anda akan mendapatkan kesalahan saat mencoba memasukkan pasangan duplikat terlepas dari urutannya.
Pada RDBMS yang layak seperti PostgreSQL
anda akan dapat menggunakan indeks pada ekspresi:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Jadi, beralihlah sebelum terlambat;-)