MySQL友情架构

时间:2015-10-08 14:18:08

标签: mysql

我有以下表格

create table users
(
    id_user int(9) AUTO_INCREMENT primary key,
    email varchar(64)
);

create table friendships
(
    id_friendship int(9) AUTO_INCREMENT primary key,
    id_friend1 int(9),
    id_friend2 int(9),
    FOREIGN KEY (id_friend1) REFERENCES users(id_user),
    FOREIGN KEY (id_friend2) REFERENCES users(id_user),
    UNIQUE(id_friend1,id_friend2)
)

我想避免两个用户之间有两次相同的友谊。 但是我仍然可以像这样两次插入相同的友谊:

INSERT INTO friendships( id_friend1, id_friend2) VALUES (1,2)
INSERT INTO friendships( id_friend1, id_friend2) VALUES (2,1)

对我(1,2)和(2,1)是平等的,我想避免它。我怎样才能实现它?

2 个答案:

答案 0 :(得分:3)

您可以按特定顺序编写这些ID。例如,在插入之前,尝试确保较小的id进入左列,较大的id进入另一列。

在你的例子中总是如下:

INSERT INTO friendships( id_friend1, id_friend2) VALUES (1,2)

并且永远不会像:

INSERT INTO friendships( id_friend1, id_friend2) VALUES (2,1)

因为id 2大于id 1。

希望它有所帮助!

答案 1 :(得分:0)

不幸的是,MySql仍然不支持检查约束,因此您必须在业务逻辑中强制执行此限制。如果要插入(1,2),只需通过运行简单的select语句检查是否存在(2,1)。