본문 바로가기
IT ▶/Data

[Database] 데이터베이스 테이블 제약조건 PK, FK, UK 개념

by 오프로 2020. 3. 7.



안녕하세요~!


데이터베이스에서 주키, 외부키, 고유키, not null 등 여러 테이블 제약조건 정리하였으니 참고하시기 바랍니다~!





1> 제약조건


- 테이블 단위에서 데이터의 무결성 보장하는 규칙

- 데이터, 테이블 수정 작업의 경우 잘못된 트랜젝션 수행을 방지하는 역할

- 테이블 간 제약조건이 있어서 종속성이 있는 경우 테이블 삭제 방지




2> PK (Primary Key)


- 주 식별자키로 테이블의 모든 데이터를 식별하는 컬럼

- 중복 불가, NULL 불가

- 함수적 종속 관계





2-1> PK 주키 (=주식별자키) 생성



- 테이블 레벨 정의

CREATE TABLE TEST_TABLE ( 

…

CONSTRAINT 제약조건 PRIMARY KEY (컬럼)

);



- 컬럼 레벨 정의

CREATE TABLE 테이블명 ( 

컬럼 데이터타입 CONSTRAINT 제약조건 PRIMARY KEY,
…..

);



- 테이블 생성 시 단 한 개의 PK 설정

- 중복이나 NULL 불가

- 고유 인덱스 자동 생성

- PK 지정 가능한 컬림이 여러 개 있을 경우, 많이 사용되고 간단한 컬럼 선택





3> FK (Foreign Key)


- 외부 식별자키로 테이블 간의 관계 의미

- 두 테이블 간의 종속이 필요한 관계이면 그 접점이 되는 컬럼을 FK로 지정하여 서로 참조할 수 있도록 관계를 맺어준다.

- 테이블 간 잘못된 매핑을 방지하는 역할




3-1> FK 외부키 (=참조키) 생성


- 테이블 레벨 정의

CREATE TABLE 테이블명 ( 
…
CONSTRAINT 제약조건 FOREIGN KEY (컬럼) 

REFERENCE 참조테이블 (참조컬럼) [ON DELETE CASCADE]

);



- 컬럼 레벨 정의

CREATE TABLE 테이블명 ( 

컬럼명 데이터타입 CONSTRAINT 제약조건 FOREIGN KEY

REFERENCE 참조테이블 (참조컬럼) [ON DELETE CASCADE], 
…
);



- 테이블 생성 시 FK 생성

- FK 선언한 테이블이 하위 테이블

- 참조하는 테이블은 부모(상위) 테이블

- 상위 테이블, 참조할 컬럼이 존재 필요

- 참조가 되면 해당 상위 테이블과 데이터 삭제나 변경 불가

- ON DELETE CASCADE : 참조되는 상위 테이블 행에 대한 DELETE 허용 (상위, 하위 같이 삭제)

- 참조하는 컬럼 데이터 타입 (자료형) 일치

- 참조되는 컬럼은 PK, UK만 가능





4> UK (Unique Key)

CREATE TABLE 테이블명 (

…

CONSTRAINT 제약조건 UNIQUE (컬럼)

);

 

CREATE TABLE 테이블명 (

컬럼 데이터타입 CONSTRAINT 제약조건 UNIQUE,

…. 

);


- 고유키

- 중복된 값을 허용하지 않고, 여러 개 NULL 값은 허용

- 고유 인덱스 자동 생성





5> NOT NULL 설정

CREATE TABLE 테이블명 ( 

컬럼 데이터타입 CONSTRAINT 제약조건 NOT NULL,

….
);



- 테이블 레벨 정의 불가 (컬럼 정의 시 끝에 NOT NULL 조건 추가)

- 지정된 컬럼은 NULL 값 입력 불가 (INSERT 할 때 필수 값이다.)

- 가능한 모든 컬럼에 NULL 허용하지 않게 NOT NULL 조건을 추가하는 것이 좋다.





6> Check 설정

CREATE TABLE 테이블명 (

….

CONSTRAINT 제약조건 CHECK (조건)

);

 

CREATE TABLE 테이블명 (

컬럼 데이터타입 CONSTRAINT 제약조건 CHECK (조건),

…
); 



- 행에 입력될 데이터의 조건을 정의

- 조건은 WHERE 절 기술하는 조건 형식과 동일

- 해당 컬럼에 대해서 데이터가 insert 될 때 조건과 틀리게 insert 되면 ORA-02290 체크 제약조건 오류가 발생됩니다.


ex : CONSTRAINT test_ch_num CHECK (LENGTH(num) = 10);

-> 테이블 생성 시 위와 같이 num 컬럼에 대해 길이가 10이라는 조건을 걸어주면, 실제 데이터 INSERT 시 해당 num 컬럼이 10이 아닐경우 insert 오류가 발생됩니다.





7> 제약조건 추가 / 삭제


- 제약 조건 추가 (NOT NULL 조건은 MODIFY 명령어로 추가)

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건 제약조건타입



- NOT NULL 조건 추가

ALTER TABLE 테이블명
MODIFY 컬럼 CONSTRAINT 제약조건 NOT NULL; 



- 제약조건 삭제 (CASCADE : PK, UK가 삭제되면, 참조된 FK 삭제)

ALTER TABLE 테이블명
DROP PRIMARY KEY | UNIQUE (컬럼) | CONSTRAINT 제약조건 [CASCADE]



아래 데이터베이스 관련 내용 참고하시기 바랍니다!!



[IT/Data] - [Database] 데이터베이스 테이블 생성 & 테이블 데이터타입 개념
[IT/Data] - SQL 쿼리 기본함수 정리 및 예시 (UPPER, CONCAT, INITCAP, SUBSTR)
[IT/Data] - 데이터베이스 INDEX 개념과 INDEX 사용방법 알아보자. – by.SC
[IT/Data] - 데이터베이스 TRIGGER 개념, TRIGGER 사용방법 알아보자. – by.SC
[IT/Data] - [SQL 기초] ORACLE JOIN 동작 원리



이상으로 감사합니다.~!!!



728x90
300x250