2011-09-24 67 views
1

我有一个表用户与列ID。我希望用户与其他用户建立关系,因此我创建了一个表关系与列user_id_1user_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,但我认为这是一个普遍的设计问题。谢谢!

+0

问题会在不同的数据库不同的解决,取决于功能(例如,MySQL没有CHECK约束)。 – Oded

回答

1

您可以在检查这些条件的连接表上编写INSERTUPDATEtriggers

+0

我想我会采用这种方法,Johan的代码是一个很好的基础。谢谢。 – Alvis

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 ; 
相关问题