使该FRIENDSHIP
表的主键为:
…将确保您不能有重复的订单。意思是,它将阻止您添加用户标识“ 123”和友好标识“ 789”的重复项。如果包含状态列,则不再是这种情况,因为不同的状态值将允许userid和friendid列的重复。
为了停止反向对-用户标识“ 789”和友好标识“ 123”,您需要包含逻辑以检查该对在存储过程,函数或触发器中是否已存在于表中。如果还不存在相反的条件,则userid <friendid的CHECK约束将停止添加userid“ 789”和friendid“ 123”的有效尝试。
INSERT INTO FRIENDSHIP
SELECT @userid, @friendid, 1
FROM FRIENDSHIP f
WHERE NOT EXISTS(SELECT NULL
FROM FRIENDSHIP t
WHERE (t.userid = @friendid AND t.friendid = @userid)
OR (t.userid = @userid AND t.friendid = @friendid)