2009-09-03 3 views
1

문제는 다음과 같습니다.두 필드와 그 반대의 고유 제약

내 데이터베이스에 우정 테이블이 있습니다. 우정 테이블에는 사용자 테이블에 대한 두 개의 외래 키가 있습니다.

두 개의 외래 키에 고유 키를 설정하여 복제본을 없애고 싶지만 더 원합니다. 사용자 A가 사용자 B를 추가 한 다음 B가 A를 추가 할 수 없으면 원합니다. 테이블에 A와 B의 우정을 나타내는 행이 하나만 있어야합니다.

데이터베이스 서버에서 이러한 제약 조건을 추가 할 방법이 있습니까?

지금까지 코드에서이 제약 조건을 유지했습니다.

답변

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 
+0

감사합니다. – mpcabd

1

(LEAST(friend1,friend2), GREATEST(friend1,friend2))에 고유 제한 조건을 추가 할 수 있습니다. 정확한 표현은 사용중인 RDBMS에 따라 다를 수 있습니다.

관련 문제