작성
·
2.2K
0
안녕하세요? 선생님
정성어린 강의 잘 보고 있습니다
다른건 아니고 샘플 테이블을 만지작 거리다가 궁금한게 생겨서 질문 드립니다
샘플 테이블을 보면 pk와 똑같은 칼럼으로 index도 설정 하셨던데 제가 알기로는 pk를 설정하면 자동으로 인덱스가 설정되는 것으로 알고 있는데 제가 이상하게 알고 있는 건지 궁금합니다
저희 회사 데이터베이스의 테이블을 보면 DBA가 무슨 생각인지 몰라도 PK성 칼럼을 제약조건 PK를 쓰지 않고 unique index + not null로 설정하였습니다. 제가 생각하기엔 unique index+not null은 한 테이블에 여러 개 설정할 수 있다 정도 빼면 둘은 본질적으론 같다고 생각하는데 혹시 다른 점이 있을까요?
강의에서 다루신 내용을 벗어나는 질문을 한 점 양해 부탁드립니다.
감사합니다
답변 1
1
안녕하십니까,
음, 실습 스크립트에서는 pk외에 다른 인덱스는 크게 신경 쓰실 필요는 없을 것 같습니다. 분석용 SQL이라 Index를 이용하실 필요는 거의 없습니다. PK외에는 제외하는게 맞는데도 불구하고 일부 인덱스가 생성된것 같은데, 무시하셔도 됩니다.
그리고 PK 제약조건은 DB내부적으로 UNIQUE 인덱스를 생성함과 동시에 NOT NULL Check가 됩니다. 그러니까 PK 는 Unique + Not Null이 됩니다. 그런데 미세한 차이가 있습니다.
PK는 한 테이블에 1개만 설정할 수 있습니다. 반면에 한 테이블에 여러개 컬럼들은 Unique + not NULL 조건으로 설정할 수 있습니다.
보통 Primary key 제약을 안사용하고 unique + not null을 사용하는 경우는 해당 key값을 drop 할때 제약 조건을 순차적으로 없애서 적용하기를 원할때 이렇게 사용하기도 합니다. 그러니까 pk index를 drop하지 않고 not null constraint를 먼저 제거하기를 원하는 방식으로 사용하고자 할때 적용할 수도 있습니다. 과거에는 이런 방식을 적용하기도 했는데, 요즘 DB(제가 오라클만 확인해봐서...)들은 PK 삭제시 INDEX는 놔두고 Not null constraint만 삭제할 수 있도록 SQL이 option을 제공하고 있습니다.
가능하다면 Primary Key로 pk를 지정하는게 운영시 직관적인 이해에 더 도움이 될 수는 있지만 unique + not null로 설정해도 문제는 없습니다(과거에는 이렇게 설정하는 경우도 있었습니다)
감사합니다.