Trong mysql, cách duy nhất tôi có thể nghĩ đến là thêm một vài cột tiện ích như
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
và thêm một vài trình kích hoạt đặt u0
và u1
ít nhất và lớn nhất trong số hai:
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);
sau đó bạn thêm một chỉ mục duy nhất trên (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
Và bây giờ bạn sẽ gặp lỗi khi cố gắng chèn cặp trùng lặp bất kể thứ tự.
Trên một RDBMS tốt như PostgreSQL
bạn sẽ có thể sử dụng chỉ mục trên biểu thức:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Vì vậy, hãy chuyển đổi trước khi quá muộn;-)