数据库设计 - 链接相同实体的多对多表?

时间:2011-09-24 18:19:26

标签: mysql sql database

我有一个表用户,其中列 id 。我希望用户与其他用户建立关系,因此我创建了一个表关系,其中列 user_id_1 user_id_2

问题是如何约束表格以便

1)没有 user_id_1 等于 user_id_2 的条目。

例如,条目(1,1)很糟糕,因为它表明与自己的关系。

2)如果有条目(user_id_1,user_id_2),则不允许使用条目(user_id_2,user_id_1)

例如,输入条目(1,2)和(2,1)是不好的,因为它表示相同的关系。

我正在使用MySQL,虽然我认为这是一个一般的设计问题。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在联接表上写一个INSERTUPDATE triggers来检查这些条件。

答案 1 :(得分:1)

您使用触发器:

DELIMITER $$

CREATE TRIGGER bi_relationschip_each BEFORE INSERT ON relationship FOR EACH ROW
BEGIN
  IF NEW.user1_id = NEW.user2_id THEN
    SELECT error_user1_cannot_be_equal_to_user2 FROM generate_error;
  END IF; 
END $$

DELIMITER ;