在两个领域,其反向唯一约束
-
21-09-2019 - |
题
问题是以下,
我有友谊的表在我的数据库,友谊表有两个外键的用户表。
我想设置在两个外键唯一键,让我有没有重复,但我想更多的,我想,如果用户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
。
不隶属于 StackOverflow