问题是下面的,唯一约束在两个字段和他们的反向
我有一个友谊表在我的数据库中,友谊表有两个外键的用户表。
我想在两个外键上设置一个唯一的键,这样我就没有重复,但我想要更多,我想如果用户A添加了用户B,那么B将无法添加A,我想在表中只有一行表示A和B之间的友谊。
有什么办法从数据库服务器添加这样的约束吗?
到现在为止,我在代码中保留了这个约束。
问题是下面的,唯一约束在两个字段和他们的反向
我有一个友谊表在我的数据库中,友谊表有两个外键的用户表。
我想在两个外键上设置一个唯一的键,这样我就没有重复,但我想要更多,我想如果用户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
。
谢谢你的回答,这正是我需要的:) – mpcabd 2009-09-04 13:54:33