반응형
null 값이 가능한 필드에 고유 인덱스를 만드는 방법(Oracle 11g)?
3개의 열(ID, UNIQUE_VALUE, UNIQUE_GROUP_ID)이 있는 샘플 테이블입니다.
나는 아래의 기록들이 허용되기를 원합니다:
(1, NULL, NULL)
(2, NULL, NULL)
아니면
(3, NULL, 7)
(4, 123, 7)
또는 (참고: 이 조건은 nor에서 허용되지 않습니다)
(5, NULL, 7)
(6, NULL, 7)
그리고 이것들은 허용될 수 없습니다.
(7, 123, 7)
(8, 123, 7)
마지막 두 열에 고유한 인덱스를 만들었지만 처음 두 개의 예제만 허용됩니다.
둘 다 null이 아닌 경우에만 db가 이 두 컬럼의 고유성을 확인할 수 있습니까?
두 행 모두에 고유성만 적용하려고 합니다.UNIQUE_VALUE
그리고.UNIQUE_GROUP_ID
null이 아닙니다.이렇게 하려면 고유한 함수 기반 인덱스를 사용할 수 있습니다.
CREATE UNIQUE INDEX func_based_index ON the_table
(CASE WHEN unique_value IS NOT NULL
AND unique_group_id IS NOT NULL
THEN UNIQUE_VALUE || ',' || UNIQUE_GROUP_ID
END);
nvl 함수를 사용하여 null을 피하고 대신 다른 값을 지정할 수 있습니다.
create unique index func_idx on TEST_TABLE (nvl(UNIQUE_VALUE,1), UNIQUE_GROUP_ID);
단점은 인덱스가 더 커지기 때문에 null 값을 검색하려면 table_access_full을 피하기 위해 nvl 함수를 사용해야 합니다.
또한 모든 null 값은 인덱스의 한 가지 가지 아래에 있으므로 히스토그램이 업데이트되었는지 확인합니다.
도움이 되었으면 좋겠습니다 :)
언급URL : https://stackoverflow.com/questions/13042997/how-to-create-unique-index-on-fields-with-possible-null-values-oracle-11g
반응형
'programing' 카테고리의 다른 글
HyperLogLog 알고리즘은 어떻게 작동합니까? (0) | 2023.09.11 |
---|---|
마리아드비 컨테이너 하나에만 연동된 Gitlab과 Wordpress 컨테이너 사용이 가능한가요? (0) | 2023.09.11 |
지정된 cmdlet에 대한 모듈을 어떻게 찾습니까? (0) | 2023.09.11 |
시스템.웹.HttpException: 요청 시간 초과 (0) | 2023.09.11 |
Liquibase generateChangeLog는 성공했지만 changeLog는 비어 있습니까? (0) | 2023.09.11 |