반응형

오라클의 제약조건이란 테이블 생성 시 필요의 따라 NOT NULL, 기본키, UNIQUE, 외래키, CHECK 제약조건을 걸어 줄 수 있다. 제약조건은 데이터의 무결성(데이터의 일관성 및 정확성)을 유지하기 위해서 제약조건을 걸어준다. 각각의 제약조건의 대해서 살펴 보자. (테이블 생성이 반복될 수도 있지만 각각의 차이점을 보고 익숙해지기 위해서 계속 눈여겨 보도록 하자.)


NOT NULL

CREATE TABLE SHOP_USER (     CLOSE_MONTH VARCHAR2(6) NOT NULL,     CLOSE_DATE VARCHAR2(8) NOT NULL,     SEQ VARCHAR20(20) NOT NULL,     USER_NAME VARCHAR2(10),     POINT_MONEY NUMBER(15) ) TABLESPACE USER_DATA NOLOGGING

CLOSE_MONTH, CLOSE_DATE, SEQ에 NOT NULL 제약조건을 걸게 되면 값이 무조건 입력 되어야 된다. 

제약 조건이 NOT NULL만 있기 때문에 중복된 값이 들어 갈 수 있다.


기본키

CREATE TABLE SHOP_USER (     CLOSE_MONTH VARCHAR2(6) NOT NULL,     CLOSE_DATE VARCHAR2(8) NOT NULL,     SEQ VARCHAR20(20) NOT NULL,     USER_NAME VARCHAR2(10),     POINT_MONEY NUMBER(15),     CONSTRAINT PK_SHOP_USER PRIMARY KEY(CLOSE_MONTH, CLOSE_DATE, SEQ) USING INDEX TABLESPACE USER_IDX NOLOGGING ) TABLESPACE USER_DATA NOLOGGING

CLOSE_MONTH, CLOSE_DATE, SEQ에 기본키 제약조건이 걸려 있다. 기본키 제약조건은 해당 컬럼에 값이 무조건 입력이 되어야 되며 해당 컬럼의 값이 중복이 되면 안된다.


CLOSE_MONTH / CLOSE_DATE / SEQ

201903 / 20190312 / 1

201903 / 20190312 / 2

각각의 해당 컬럼에 들어 가는 값들인데 위의 데이터는 현재 중복이 없다.


201903 / 20190312 / 1

다시 한번 똑같은 값이 들어가게 되면 기본키 위배로 에러가 발생한다.


기본키 = NOT NULL + UNIQUE


UNIQUE

CREATE TABLE SHOP_USER (     CLOSE_MONTH VARCHAR2(6) NOT NULL,     CLOSE_DATE VARCHAR2(8) NOT NULL,     SEQ VARCHAR20(20),     USER_NAME VARCHAR2(10),     POINT_MONEY NUMBER(15),     CONSTRAINT UK_SHOP_USER UNIQUE KEY(CLOSE_DATE, CLOSE_TIME, SEQ) ) TABLESPACE USER_DATA NOLOGGING

CLOSE_MONTH, CLOSE_DATE, SEQ에 유니크 제약조건이 걸려 있다.  SEQ와 같이 NULL이 허용된 컬럼에도 UNIQUE를 걸어 줄 수 있다.

201903 / 20190312 / 1

201903 / 20190312 / ''

201903 / 20190312 / 2

두번째 열처럼 SEQ에 널 값을 입력 할 수는 있다.


201903 / 20190312 / 1

하지만 똑같은 값을 입력하게 되면 에러가 발생한다.


외래키

CREATE TABLE SHOP_USER (     CLOSE_DATE VARCHAR2(8) NOT NULL,     CLOSE_TIME VARCHAR2(8) NOT NULL,     SEQ VARCHAR20(20) NOT NULL,     USER_NAME VARCHAR2(10),     POINT_MONEY NUMBER(15),     CONSTRAINT FK_SHOP_USER FOREIGN KEY(USER_NAME) REFERENCES MANAGE_USER(USER) ) TABLESPACE USER_DATA NOLOGGING

외래키는 다른 테이블의 컬럼을 참조하여 현재 테이블의 컬럼 값을 입력 할 수 있다. 위의 테이블에는 USER_NAME이 외래키로 걸려 있는데 USER_NAME이라는 컬럼은 MANAGE_USER테이블의 USER 테이블을 참조하여 현재 테이블의 값을 입력 할 수 있는 것이다. 외래키에 걸려 있는 테이블에 입력할려는 값이 없다면 에러가 발생한다.


실무에서는 생각보다 외래키를 많이 사용하지 않는다. 스키마에는 외래키 표시가 되어 있지만 실제 테이블에는 외래키 제약조건을 사용하지 않는다. 이유는 외래키를 생성 해놓으면 데이터 무결성을 지키겠지만 외래키로 인한 작업 시 불편한 점이 많다.


CHECK

CREATE TABLE SHOP_USER (     CLOSE_DATE VARCHAR2(8) NOT NULL,     CLOSE_TIME VARCHAR2(8) NOT NULL,     SEQ VARCHAR20(20) NOT NULL,     USER_NAME VARCHAR2(10),     POINT_MONEY NUMBER(15)

CONSTRAINTS PM_CHECK CHECK (POINT_MONEY BETWEEN 1 AND 10000)

    REGION VARCHAR2(10),

CONSTRAINTS REGION_CHECK (REGION IN ('서울', '경기', '대구'))

)

마지막으로 CHECK 제약조건이다. POINT_MONEY의 금액을 1 부터 10,000 까지 제약조건을 줬으며 해당 범위에 포함이 안된 값이 들어간다면 에러가 발생한다. 지역 컬럼에는 서울, 경기, 대구 값만 들어 갈 수 있도록 제약조건을 설정하였다.

반응형

+ Recent posts