1

問題は次のとおりです。

私のデータベースにはフレンドシップのテーブルがあり、フレンドシップ テーブルには users テーブルへの 2 つの外部キーがあります。

重複がないように、2 つの外部キーに一意のキーを設定したいのですが、もっと欲しいのです。ユーザー A がユーザー B を追加した場合、B は A を追加できなくなります。 A と B の友情を表す行がテーブルに 1 つだけあります。

データベース サーバーからそのような制約を追加する方法はありますか?

これまで、コード内でこの制約を維持してきました。

4

2 に答える 2

2

はい、説明したビジネスルールをチェックし、競合が見つかった場合はトランザクションをロールバックするトリガーを追加する必要があります。この構文はデータベースによって異なる場合がありますが、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
于 2009-09-03T22:41:06.277 に答える
1

にユニーク制約を追加できます( LEAST(friend1,friend2), GREATEST(friend1,friend2) )。正確な言葉遣いは、RDBMS使用されているものによって異なる場合があります。

于 2009-09-03T22:37:23.523 に答える