问题是以下,

我有友谊的表在我的数据库,友谊表有两个外键的用户表。

我想设置在两个外键唯一键,让我有没有重复,但我想更多的,我想,如果用户A加入用户B,那么B将无法添加A,和我想只有一个行中,表示A和B之间的友谊的表。

有没有办法从数据库服务器添加这样的限制?

到现在为止我一直保持着这种约束在我的代码。

有帮助吗?

解决方案

是的,你需要添加检查你所描述的业务规则,如果找到一个冲突回滚事务的触发器。其语法可能是在不同的数据库不同,但在SQL服务器这将是

  Create Trigger trig_StopRecipFriendships
  for Insert, Update On Friendships
  As
    If Exists (Select * From Friendships F1
                 Join Friendships F2  
                   On F1.UserA = F2.UserB
                      And F1.UserB = F2.UserA)
     Begin
         Rollback Transaction
         Raiserror ('These Users are already friends', 16,1)
     End

其他提示

您可以在( LEAST(friend1,friend2), GREATEST(friend1,friend2) )添加的唯一约束。确切的用语可取决于所使用的RDBMS

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top