【问题标题】:Unique Constraint on two fields and their reverse两个字段的唯一约束及其相反
【发布时间】:2009-09-03 22:31:00
【问题描述】:

问题如下,

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

我想在两个外键上设置一个唯一键,这样我就不会重复了,但是我想要更多,我希望如果用户 A 添加了用户 B,那么 B 将无法添加 A,并且我希望表格中只有一行代表 A 和 B 之间的友谊。

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

到目前为止,我一直在我的代码中保持这个约束。

【问题讨论】:

    标签: database unique reverse constraints


    【解决方案1】:

    是的,您需要添加一个触发器来检查您描述的业务规则并在发现冲突时回滚事务。这在不同的数据库中的语法可能不同,但在 SQL Server 中会是

      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
    

    【讨论】:

    • 谢谢你的回答,正是我需要的:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2015-12-17
      • 2021-08-28
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      相关资源
      最近更新 更多