2012-03-20 4 views
0

내 테이블 스키마에 대한 최대의 하나입니다SQL : 제약 조건 중 하나 이상을 적용 && 각 키

r(int aID not null, int bID not null, bool main) 

기본 키 (AID, BID). aID와 bID는 모두 외래 키 (다른 테이블 참조)입니다.

내가 모든 원조를 위해 그 시행 할 항상 하나 것도 사실 = 주요 하나 개에만 입찰이있다.

내가 점에서 데시벨 레벨을 할 수 있습니까? constraint unique (aID, main)을 추가하여 "최대 1"을 시행 할 수 있으며 main은 true 또는 NULL입니다.

방법 "적어도 1"부분은 어떻습니까?

PS : MySQL의에서 작업.

편집 : 설명을위한 예제 데이터 : aID와 bID의 다양한 조합을 가질 수 있지만 각 aID에는 하나의 조합 만 main = true이어야합니다. 데모 데이터 :

1, 2, true 
1, 3, NULL 
1, 4, NULL 
1, 5, true <- wrong, only one main=true 
... 

답변

0

두 개의 트리거를 만들어야합니다. 둘 다 각 행에 적용 가능합니다. 첫 번째는 삽입 전에 적용 할 수 있고 두 번째는 업데이트 전에 적용 할 수 있습니다. main = true이고 newID가 아닌 bID가 다른 동일한 aID를 가진 테이블에 행이 적어도 하나 이상 있고 main = true 인 경우 new.main = false를 설정하십시오.

당신은 RDBMS에 대부분의 단일 트리거에서이 작업을 수행 할 수 있지만, (내가 잘못 아니에요 경우) MySQL은 지원하지 않습니다 삽입 및 업데이트를 모두 적용 트리거합니다.

+0

아마 내가 올바르게 설명하지 않았으므로 업데이트 된 원본 게시물을 참조하십시오. 고맙습니다! –

+0

나는 내 대답을 편집 할 것이고, 두 번째 버전은 더 도움이 될 것입니다, 적어도 그렇게되기를 바랍니다. –