2013-08-05 4 views
0

10 열 - col1, col2, col3 .... col10이있는 Oracle 테이블이 있습니다. 내 요구 사항은 - col1, col2, col3 즉, (col1, col2, col3)의 고유 한 값 집합에 대해 col4의 고유 값은 여러 번이라도 허용됩니다. 예 : col1 = 3, col2 = 'A005'및 col3 = 10 인 10 개의 행이있는 경우 모든 10 개의 행에 대해 col4의 값이 동일해야합니다.데이터베이스 제약 조건에 대한 쿼리

어떻게 Oracle에서이 제한 사항을 적용 할 수 있습니까?

답변

1

세 개의 열 (co1, col2, col3)에 고유 한 제한 조건을 적용한 다음 외래 키로 사용하여 별도의 표에 추가 할 수 있습니다 (즉, 다른 표로 col4를 이동). 이것은 현재 col4에서 얻을 중복 값을 제거합니다 (나쁜 관행 - 이유를보기 위해 데이터베이스의 '정규화'에서 읽음).

그래서 고유 한 모든 조합 (col1, col2, col3)은 col4에 대해 정확히 하나의 행으로 매핑되지만 별도의 테이블에 매핑됩니다.

예. http://sqlfiddle.com/#!4/ad317

편집 : sqlfiddle에서 수정 테이블 컬럼/스키마

을 원하는하지 당신은, 당신의 기본 테이블에 트리거를 추가 할 수있는 값을 기록하는

/별도의 '링크'테이블에 변경 : http://sqlfiddle.com/#!4/d78f6

두 번째 'link'테이블은 (col1, col2, col3)의 각 고유 값에 대해 col4의 고유성을 적용합니다. 이것은 table1의 컬럼/값을 이전과 동일하게 유지할 수있게합니다. 기본적으로 정보를 테이블에 복제하여 을 수행하면은 정상화 할 수 있습니다.

+0

제 요구 사항이 혼란스럽지 않기를 바랍니다. 내가 다시 분명히하자. (col1, col2, col3, col4) 집합에 대한 여러 항목이 허용됩니다. 그러나 (col1, col2, col3)의 집합에 대해서 col4의 값은 하나만 허용됩니다. 별개의 값을 가진 삽입은 오류가 발생합니다. 현재 col1 = 3이고 col2 = 'A005'이고 col3 = 10 인 행이 없다고 가정합시다. 삽입은 위의 값과 col4 = 234로 수행됩니다. col1 = 3, col2 = 'A005'및 col3 = 10 인 후속 삽입은 col4 = 234 만 가져야합니다. col4의 다른 값은 허용되지 않습니다. –

+0

내 이해를 확인하자 : col1, col2 및 col3이 동일 할 때마다 col4도 동일해야합니다. 따라서 별도의 행을 허용 할지라도 col4의 동일한 값을 반복하기를 원하십니까? –

+0

만약 그렇다면 요점은 이것이 일반적인 나쁜 습관처럼 보입니다. 그리고 그것을 해결하는 일반적인 방법은 col4를 별도의 테이블로 제거하는 것입니다. 여기서 우리는 중복 값을 피할 수 있습니다. 중복 값은 글을 읽을 때, 쓰는 중, 수정할 때 문제를 일으 킵니다 ...이 모범 사례 '표준화'에 대한 자세한 내용은 여기에 있습니다 : http://stackoverflow.com/questions/2331838/normalization-in-plain-english –

관련 문제