[질문] 유니크 인덱스와 기본키 차이점 0 8 18,573

by 손형선 [2007.10.25 08:12:10]


Primary 키와 Unique Index의 차이점이 헷갈리네요.

 

Unique Index 는 해당 칼럼 동일값 X. 인덱스 자동생성, NULL 삽입 가능
Primary Key  는 Unique Index + NOT NULL, 테이블에서 행을 서로 구별?

 

그렇다면 Unique Index + 테이블 생성시 해당컬럼 NOT NULL 하면
Primary Key 는 굳이 안만들어도 되는건가요?

 

drop table GXGDBA.TEST_INDEX_T with cascade omn
CREATE TABLE GXGDBA.TEST_INDEX_T
(
 AA            VARCHAR2 (20) NOT NULL,
 BB            VARCHAR2 (20)
)
TABLESPACE GXG_DATA;


CREATE UNIQUE INDEX GXGDBA.TEST_INDEX_PK
ON GXGDBA.TEST_INDEX_T
(
 AA
)
TABLESPACE GXG_IDX;


insert into test_index_t values ('a','b');
insert into test_index_t values (null,'b');  -> not null 제약조건
insert into test_index_t values ('a','b');   -> unique 인덱스 제약조건


-- unique key + not null 제약있다면 필요없단 말인가?
ALTER TABLE GXGDBA.TEST_INDEX_T ADD(
 CONSTRAINT TEST_INDEX_PK PRIMARY KEY (AA));

 

by 현 [2007.10.25 00:00:00]
네. 물리모델에서 본다면 엄밀히 말하면 그렇긴 하지만, 논리 모델에서는 pk는 식별자 등의 역할로써의 기능을 합니다.

by 웅 [2007.10.25 00:00:00]
ERD로 리버스엔지니어링을 할때 PK없이 유니크로 되어 있으면 좀 짜증나던데요 ^^;

by 장태길 [2007.10.25 00:00:00]
PK 는 엄밀히 말해서 constraint 의 일부입니다.
제약 조건이죠. 그 제약이 unique + not null 이라는
것이죠, 그 제약을 핸들링 하기 위해서 index 를
이용하는것이구요. PK 생성시 자동으로 unique index
가 생성 됩니다. 반대로 unique index 가 사전에 있는 상태에서 동일한 PK 를 생성 하면 PK 설정시 따로 Index 를 만들지 않고 기존에 생성된 unique index 사용으로 대체 합니다.
unique index 는 제약 이고, Index 이나
개념적으로 not null 차이만 있습니다.
적고보니 이상해졌네요 ㅡ_ㅡ;
거의 흡사하고 이야기 하신것처럼
not null 을포함 할수 있냐 없냐 차이뿐입니다.
unique key + not null 제약있다면 필요없단 말인가?
있다면 PK 설정 하면 따로 unique index작업을 하지 않을뿐입니다.
select * from user_constraints where TABLE_NAME='TEST_INDEX_T';
select * from user_indexes where TABLE_NAME ='TEST_INDEX_T';

alter table TEST_INDEX_T add constraint TEST_INDEX_PK primary key
( AA ) using index ;

select * from user_constraints where TABLE_NAME='TEST_INDEX_T';
select * from user_indexes where TABLE_NAME ='TEST_INDEX_T';
이렇게 해보시면 결과차이를 보구 확인 가능하실꺼에요.

by 마농 [2007.10.25 00:00:00]
분명한 차이가 있습니다.
PK 는 테이블에 오직 한개만 생성할 수 있습니다.
PK 의 목적은 데이터 무결성입니다.
INDEX 는 여러개 생성 가능하구요.
INDEX 의 목적은 빠른 자료 조회입니다.

by 범정 [2007.10.25 00:00:00]
넘어렵다...

by 현 [2007.10.25 00:00:00]
음...정리 합시다.
pk와 uk는 일단 데이터 무결성 이라는 근본 취지는 동일합니다.(nuall사용여부만 다르죠)
단지, pk는 테이블당 하나만 만들수있고 pk를 만들면 unique, not null 제약조건은 기본적으로 따라 오게 되어 있습니다.
그렇기 때문에 물리모델에서 본다면 pk나 unique + not null 이나 동일합니다.
그렇지만 논리적으로 본다면 마농님 말씀대로 목적은 분명히 다릅니다.
그렇기 때문에 결과적으로 같다고 그렇게 쓰기 이전에 정확한 목적에 맞게 사용하시는 것이 중요합니다.

by finecomp [2007.10.25 00:00:00]
저도 한마디...;

unique를 not null로 만들면 unique와 PK 둘다 기능은 같습니다만,
Unique Index + not null은 자체의 unique+not null데이터를 유지하려는 의미가 강한 것이고 이는 굳이 따지자면 데이터무결성 중 실체무결성의 의미입니다.
PK는 관계에 중심을 둔 의미로 FK까지를 고려하여 의미를 이해하시는 것이 좋을 듯 합니다.
한 테이블의 FK제약은 다른 관계 테이블의 PK제약값이 반드시 존재해야 한다는 것 입니다.
이를 또한 데이터무결성 중 참조무결성이라고 합니다.

건승하시길...수고하세요~~

by 손형선 [2007.10.25 00:00:00]
답변 감사드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입