In mysql is de enige manier die ik kan bedenken om een paar hulpprogrammakolommen toe te voegen, zoals
CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
en voeg een aantal triggers toe die u0
. instellen en u1
tot de minste en grootste van de twee:
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);
dan voeg je een unieke index toe op (u0,u1)
CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);
En nu krijg je een foutmelding wanneer je een dubbel paar probeert in te voegen, ongeacht de volgorde.
Op een fatsoenlijke RDBMS zoals PostgreSQL
je zou index op uitdrukking kunnen gebruiken:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
Schakel dus over voordat het te laat is;-)