티스토리 뷰

Daylogs/DB

Key and Index in ORACLE

ohgyun 2009. 2. 12. 15:23
출처: http://arumizz.egloos.com/1126538

Key(Constraint):

  Unique - 중복 허용 안함
  Primary Key - 기본 키, Null값 허용 안함, Unique와 동일
  Foreign Key - 외래 키, 참조 무결성

Index:
  Unique Index - 정의된 필드. Unique한 데이터만 허용.
  ☞ Key의 Unique와 Primary Key 설정시 자동으로 Unique Index가 생성됨.
  Non-Unique Index - 정의된 필드 중복 허용.


K E Y

[ Key : Unique 예제 ]

1. 테이블 생성시 정의하는 경우

형식)
CREATE TABLE TABLE_NAME (
    COLUMN_1, COLUMN_2, ...,
    CONSTRAINT KEY_NAME UNIQUE(COLUMN_1, COLUMN_2, ...)
);

예제)
CREATE TABLE T_USER (
    USER_ID VARCHAR2(20) NOT NULL,
    USER_PW VARCHAR2(50) NOT NULL,
    CONSTRAINT T_USER_USER_ID_UK UNIQUE(USER_ID)
);

2. 테이블 생성후 별도로 정의하는 경우

형식)
ALTER TABLE TABLE_NAME ADD CONSTRAINT KEY_NAME UNIQUE(COLUMN_1, COLUMN_2, ...);

예제)
ALTER TABLE T_USER ADD CONSTRAINT T_USER_USER_ID_UK UNIQUE(USER_ID);


[ Key : Primary Key ]

1. 테이블 생성시 정의하는 경우

형식)
CREATE TABLE TABLE_NAME (
    COLUMN_1, COLUMN_2, ...,
    CONSTRAINT KEY_NAME PRIMARY KEY(COLUMN_1, COLUMN_2, ...)
);

예제)
CREATE TABLE T_USER (
    USER_ID VARCHAR2(20) NOT NULL,
    USER_PW VARCHAR2(50) NOT NULL,
    CONSTRAINT T_USER_USER_ID_PK PRIMARY KEY(USER_ID)
);

2. 테이블 생성후 별도로 정의하는 경우

형식)
ALTER TABLE TABLE_NAME
    ADD CONSTRAINT KEY_NAME PRIMARY KEY(COLUMN_1, COLUMN_2, ...);

예제)
ALTER TABLE T_USER
    ADD CONSTRAINT T_USER_USER_ID_PK PRIMARY KEY(USER_ID);
☞ 테이블 생성시 필드가 NULL 허용일지라도 UNIQUE 또는 PRIMARY KEY로 설정하면
    자동으로 NULL값은 허용하지 않게 된다(=NOT NULL).


[ Key : Foreign Key ]

☞ 외래키(Foreign Key)가 설정되려면 기본키(Primary Key)가 반드시 존재해야 하며,
    외래키가 존재하는 상태에서는 기본키는 삭제되지 않는다.

☞ 기본키가 삭제될때 동시에 관련 외래키도 삭제되게 하려면 ON DELETE CASCADE를 지정한다.

1. 테이블 생성시 정의하는 경우

형식)
CREATE TABLE TABLE_NAME (
    COLUMN_1, COLUMN_2, ...,
    CONSTRAINT KEY_NAME FOREIGN KEY(COLUMN_1, COLUMN_2, ...)
        REFERENCES PARENT_TABLE_NAME(COL_1, COL_2, ...)
        [ON DELETE CASCADE]
);

예제)
CREATE TABLE T_USER (
    USER_ID VARCHAR2(20) NOT NULL,
    USER_PW VARCHAR2(50) NOT NULL,
    CONSTRAINT T_USER_USER_ID_FK FOREIGN KEY(USER_ID)
        REFERENCES T_PERSON(P_ID)
        [ON DELETE CASCADE]
);

2. 테이블 생성후 별도로 정의하는 경우

형식)
ALTER TABLE TABLE_NAME
    ADD CONSTRAINT KEY_NAME FOREIGN KEY(COLUMN_1, COLUMN_2, ...)
        REFERENCES PARENT_TABLE_NAME(COL_1, COL2, ...)
        [ON DELETE CASCADE];

예제)
ALTER TABLE T_USER
    ADD CONSTRAINT T_USER_USER_ID_FK FOREIGN KEY(USER_ID)
        REFERENCES T_PERSON(P_ID)
        [ON DELETE CASCADE];


[ Key 삭제 : Unique ]

형식)
ALTER TABLE TABLE_NAME DROP CONSTRAINT KEY_NAME [CASCADE]; 또는
ALTER TABLE TABLE_NAME DROP UNIQUE(COLUMN_1, COLUMN_2, ...) [CASCADE];
☞ CASCADE - Key가 Foreign Key로 설정되어 있을 때 삭제되지 않는데 이를 위한 옵션임.

예제)
ALTER TABLE T_USER DROP CONSTRAINT T_USER_USER_ID_UK [CASCADE]; 또는
ALTER TABLE T_USER DROP UNIQUE(USER_ID) [CASCADE];


[ Key 삭제 : Primary Key ]

형식)
ALTER TABLE TABLE_NAME DROP CONSTRAINT KEY_NAME [CASCADE]; 또는
ALTER TABLE TABLE_NAME DROP PRIMARY KEY [CASCADE];
☞ CASCADE - 이 Key를 참조하는 모든 다른 테이블의 키도 삭제됨. Unique도 동일함.

예제)
ALTER TABLE T_USER DROP CONSTRAINT T_USER_USER_ID_PK [CASCADE]; 또는
ALTER TABLE T_USER DROP PRIMARY KEY [CASCADE];


[ Key 삭제 : Foreign Key ]

형식)
ALTER TABLE TABLE_NAME DROP CONSTRAINT KEY_NAME;

예제)
ALTER TABLE T_USER DROP CONSTRAINT T_USER_USER_ID_FK;


I N D E X
- Index의 사용 목적은 테이블의 처리 속도 향상을 위해서이다.

[ Index : Unique Index 예제 ]

Unique Index는 Key의 Unique와 Primary Key와 비슷하며, Key의 Unique와
Primary Key 생성시에 자동으로 Unique Index가 Key명을 Index명으로 하여 생성된다.

Key는 만들지 않고 Unique Index만 만들어서 Key처럼 사용하는 방법도 있지만
Foreign Key를 사용하려면 따로 Key를 생성해야 하는 불편함이 있다.

형식)
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_1, COLUMN_2, ...);

예제)
CREATE UNIQUE INDEX T_USER_USER_INDEX_UIDX ON T_USER (USER_INDEX);


[ Index : None-Unique Index 예제 ]

None-Unique Index로 사용되는 필드값은 중복이 가능하다.

형식)
CREATE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_1, COLUMN_2, ...);

예제)
CREATE INDEX T_USER_USER_INDEX_IDX ON T_USER (USER_INDEX);


[ Index 삭제 : 모두 동일 ]

Index는 Unique 및 None-Unique 모두 Index 이름으로 삭제된다.

형식)
DROP INDEX INDEX_NAME;

예제)
DROP INDEX T_USER_USER_INDEX_UIDX; -- Unique Index
DROP INDEX T_USER_USER_INDEX_IDX; -- None-Unique Index


결 론

1. 하나의 테이블 내에는 적어도 Primary Key 또는 Unique Index 하나는 있어야 한다.

2. Index나 Foreign Key를 너무 많이 사용하면 오히려 시스템의 성능을 저하시킬 수 있으므로
   적절한 곳에 적절하게 사용하는 테크닉이 필요하다. Foreign Key의 경우 시스템 개발
   단계에서만 다수의 개발자들에 의한 일관된 데이터의 입력을 이끌어 내기 위해 사용하고
   운영 단계로 넘어갈 때에 없애는 것이 좋다.
반응형
댓글
공지사항