본문 바로가기
CS/데이터베이스

[Oracle] 데이터 품질 향상

by 김크롱 2020. 9. 25.

데이터 품질 향상

 - PRIMARY KEY

 - UNIQUE

 - NOT NULL

 - CHECK

 - FOREIGN KEY

 

 

PRIMARY KEY

: 특정 컬럼에 중복 데이터, NULL값 입력을 허용하지 않음

 

테이블 생성 시점 제약 생성

CREATE TABLE tablename
(column1 NUMBER(10) CONSTRAINT tablename_column1_pk PRIMARY KEY,
 column2 VARCHAR2(10),
 column3 VARCHAR2(20));

: column1에 PRIMARY KEY 제약을 줌으로 중복 데이터와 NULL값을 허용하지 않음

 

 

테이블 생성 후 제약 생성

ALTER TABLE tablename
    ADD CONSTRAINT tablename_column1_pk PRIMARY KEY(column1);

 

 

 

 

UNIQUE

: 특정 컬럼에 중복 데이터 입력을 허용하지 않음

 

테이블 생성 시점 제약 생성

CREATE TABLE tablename
(column1 NUMBER(10),
 column2 VARCHAR2(10) CONSTRAINT tablename_column2_UN UNIQUE,
 column3 VARCHAR2(10));

: column2에 UNIQUE 제약을 줌으로 중복 데이터 값을 허용하지 않음.

- NULL값 허용

 

 

테이블 생성 후 제약 생성

ALTER TABLE tablename
    ADD CONSTRAINT tablename_column2_UN UNIQUE(column2);

 

 

 

NOT NULL

: 특정 컬럼에 NULL값 입력을 허용하지 않음

 

테이블 생성 시점 제약 생성

CREATE TABLE tablename
(column1 NUMBER(10),
 column2 VARCHAR2(10),
 column3 VARCHAR2(20) CONSTRAINT tablename_column3_NN NOT NULL);

: column3에 NOT NULL 제약을 줌으로 NULL 값을 허용하지 않음.

- 중복 데이터 허용

 

 

테이블 생성 후 제약 생성

- 기존 테이블 데이터 중 NULL값이 존재하지 않아야만 생성 가능

ALTER TABLE tablename
    MODIFY column3 CONSTRAINT tablename_column3_NN NOT NULL;

 

 

 

CHECK

: 특정 컬럼에 지정 데이터만 허용

 

CREATE TABLE tablename
(column1 NUMBER(10),
 column2 VARCHAR2(10),
 column3 NUMBER(10) CONSTRAINT tablename_column3_CK
 CHECK (column3 BETWEEN 0 AND 10000));

: column3에 0~10000 사이의 데이터만 입력/수정 허용

 

 

 

 

FOREIGN KEY

: 특정 컬럼에 지정 데이터만 허용 시 다른 테이블 데이터 참조

 

CREATE TABLE table1
(column1 NUMBER(10) CONSTRAINT table1_column1_pk PRIMARY KEY,
 column2 VARCHAR2(10),
 column3 VARCHAR2(20));

CREATE TABLE table2
(column1 NUMBER(10),
 column2 VARCHAR2(20),
 column3 NUMBER(10),
 column4 VARCHAR2(10)
 CONSTRAINT table2_column3_FK REFERENCES table1(column1));

: table2의 column3을 입력할 때 table1의 column1 데이터만 허용

- table1이 부모 테이블, table2가 자식 테이블이 됨

- table2의 column3를 입력/수정할 때 table1의 column1에 존재하는 값에 대해서만 가능

- 자식 테이블이 있는 경우 부모 테이블의 제약을 삭제할 수 없음 -> CASCADE 옵션 사용 시 가능

 

 

 

 

테이블 제약을 삭제하는 방법

 

일반적인 테이블 제약 삭제

ALTER TABLE tablename
    DROP CONSTRAINT tablname_column_CK;

: ALTER TABLE 테이블명 DROP CONSTRAINT 제약명;

 

 

부모 테이블 제약 삭제

ALTER TABLE tablename
	DROP CONSTRAINT table2_column1_pk CASCADE;

: CASCADE옵션을 사용해 삭제

- 부모 테이블 제약 삭제 시 자식 테이블의 제약이 함께 삭제됨

 

 

 

테이블 제약 확인 방법

SELECT a.CONSTRAINT_NAME, a.CONSTRAINT_TYPE, b.COLUMN_NAME
    FROM USER_CONSTRAINTS a, USER_CONS_COLUMNS b
    WHERE a.TABLE_NAME='tablename1'
    AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME;

 

 

'CS > 데이터베이스' 카테고리의 다른 글

[Oracle] WITH절 (SUBQUERY FACTORING)  (0) 2020.09.25
[Oracle] WITH절 (WITH ~ AS)  (0) 2020.09.25
[Oracle] 데이터 복구  (0) 2020.09.24
[Oracle] 중복되지 않는 번호 (SEQUENCE)  (0) 2020.09.23
[Oracle] 검색 속도 향상 (INDEX)  (0) 2020.09.23