데이터베이스/Oracle

[Oracle]무결성(Constraint) 제약 조건

반응형

무결성? 

데이터베이스에 저장된 값들이 정확하고 일관성 있는 데이터임을 나타내는 의미!

(COLUMN을 지정하는 성질. 설정)

 

제약조건?

바람직하지 않은 데이터가 저장되는 것을 방지하는 것을 의미

즉, 잘못된 데이터가 입력되지 않도록 무결성 제약 조건을 지정

 

데이터 무결성 제약 조건(Data Integrity Constraint Rule)이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러 가지 규칙을 말합니다.

 

제약조건의 종류

무결성 제약 조건 의미 형식
Primary key (기본키) -중복을 허용하지 않는다.
-NULL을 허용하지 않는다.

UNIQUE + NOT NULL

ex)ID, 주민등록번호
CONSTRAINT 제약조건명
PRIMARY KEY (컬럼명) 
Unique key (고유키) -중복을 허용하지 않는다.
-NULL을 허용

ex) E-mail
CONSTRAINT 제약조건명
UNIQUE (컬럼명)
Foreign key (외래키) -Join(테이블과 테이블의 연결)이 목적
-NULL을 허용

외래키로 지정된 컬럼은 연결된 테이블에서 PK나 UK로 설정되어 있어야 한다.
CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명)
REFERENCES 참조 테이블명 (컬럼명)
CHECK 범위를 지정. 지정된 값외에 사용할 수 없다.
NULL을 허용
CONSTRAINT 제약조건명
CHECK(범위)
NOT NULL NULL을 허용하지 않는다. 컬럼명 타입 NOT NULL

 

A. Primary key

CREATE TABLE TB_TEST06(
    PK_COL VARCHAR2(10),
    --기본키는 하나만 가능하다!.
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(20)
    CONSTRAINT PK_TEST_01 PRIMARY KEY (PK_COL, COL1) --이런식으로 하면 2개가 가능하다.
);

한 테이블에 PK가 2개이상 가질 수 있다.

예를 들어서 학생 테이블에 학번과,  주민등록번호가 동시에 존재하는 경우!

 

B. Unique key

CREATE TABLE TB_TEST06(
    UK_COL VARCHAR2(10),
    COL VARCHAR2(20),
    COL2 VARCHAR2(20),
    CONSTRAINT UK_TEST_01 UNIQUE(UK_COL)
);

 

C. Foreign key

--Parent table 
--만약 부서테이블에서 부서ID가 PK로 존재할때!
CREATE TABLE TB_DEPT( 
    DEPARTMENT_ID VARCHAR(10),
    DEPARTMENT_NAEM VARCHAR(20),
    LOCATION_ID NUMBER,
    CONSTRAINT PK_DEPT_TEST PRIMARY KEY (DEPARTMENT_ID)
);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('10','기획부',120);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('20','관리부',150);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('30','개발부',180);

--Child table 
--Foreign key 설정
CREATE TABLE TB_EMP(
    EMPNO VARCHAR2(10),
    ENAME VARCHAR2(20),
    DEPARTMENT_ID VARCHAR2(10), --컬럼명은 동일하지 않아도 된다. 가급적 동일하게 사용!
    CONSTRAINT FK_EMP_TEST FOREIGN KEY (DEPARTMENT_ID)
        REFERENCES TB_DEPT(DEPARTMENT_ID)
);

INSERT INTO TB_EMP (EMPNO, ENAME, DEPARTMENT_ID)
VALUES ('100','홍길동','10'); --DEPARTMENT_ID는 10,20,30 중 하나만 입력이 가능하다. (있는 값으로)

INSERT INTO TB_EMP (EMPNO, ENAME, DEPARTMENT_ID)
VALUES ('103','홍두께',''); -- 외래키는 NULL 가능.

 

D. Check

CREATE TABLE TB_CHECK(
    COL1 VARCHAR2(10),
    COL2 VARCHAR2(20),
    CONSTRAINT CHK_01 CHECK(COL1 IN ('사과','배','바나나') ),
    CONSTRAINT CHK_02 CHECK(COL2 > 0 AND COL2 <= 100)
);

E. NOT NULL

CREATE TABLE TB_TEST06(
    COL1 VARCHAR2(10) NOT NULL, -- NULL을 허용하지 않는다.
    COL2 VARCHAR2(20) --NULL을 허용
);
반응형