다음은 Oracle 데이터베이스 (10g)에서 실행 된 약간의 실험입니다. 오라클의 구현 편의성과는 별도로 일부 삽입이 허용되고 다른 일부는 거부되는 이유를 알 수 없습니다. , 나는 약간의 열이 알 수없는 값으로 때때로 일부 행을 가지고 의미가 있다고 가정중복을 방지하기 위해 여러 열을 제한 할 수 있지만 null 값은 무시합니까?
create table sandbox(a number(10,0), b number(10,0));
create unique index sandbox_idx on sandbox(a,b);
insert into sandbox values (1,1); -- accepted
insert into sandbox values (1,2); -- accepted
insert into sandbox values (1,1); -- rejected
insert into sandbox values (1,null); -- accepted
insert into sandbox values (2,null); -- accepted
insert into sandbox values (1,null); -- rejected
insert into sandbox values (null,1); -- accepted
insert into sandbox values (null,2); -- accepted
insert into sandbox values (null,1); -- rejected
insert into sandbox values (null,null); -- accepted
insert into sandbox values (null,null); -- accepted
을 방지 중복과 관련된 두 가지 사용 사례를 생각할 수 있습니다 : I 중복을 거부 할
1. 있지만 제한된 경우 동의 열의 값을 알 수 없습니다.
2. 제한된 열의 값을 알 수없는 경우에도 복제본을 거부하고 싶습니다.
3. 중복을 거부하지만, 동의 (만) 모든 제약 열 값을 알 수없는 경우.
예를 들어, "unknown"에 대해 특별한 값을 가지며 열을 null이 아닌 값으로 만들 수 있도록 Oracle 구현을 사용하는 방법을 생각할 수 있습니다 (2). 그러나 나는 사건 (1)을 사용하는 방법을 알아낼 수 없다.
다른 말로하면 어떻게 Oracle을 이런 식으로 행동하게 할 수 있습니까?
create table sandbox(a number(10,0), b number(10,0));
create unique index sandbox_idx on sandbox(a,b);
insert into sandbox values (1,1); -- accepted
insert into sandbox values (1,2); -- accepted
insert into sandbox values (1,1); -- rejected
insert into sandbox values (1,null); -- accepted
insert into sandbox values (2,null); -- accepted
insert into sandbox values (1,null); -- accepted
insert into sandbox values (null,1); -- accepted
insert into sandbox values (null,2); -- accepted
insert into sandbox values (null,1); -- accepted
insert into sandbox values (null,null); -- accepted
insert into sandbox values (null,null); -- accepted
완벽한 예 (플러스 그것이 내가 대답하여 필요 하나!) – orbfish