본문 바로가기

Data/MariaDB

DB] 제약 조건(constraint) 2 - 참조 제약 조건 / 연계 참조 무결성 제약 조건 / 유니크 제약 조건 / 체크 제약 조건

 

제약 조건은 테이블에 저장되는 데이터를 제약하는 특정 규칙으로

컬럼에 데이터를 넣을 경우 특정한 조건을 만족시켜야 할 경우에 사용한다.

즉, 지정된 조건에 맞지않으면 데이터 입력이 안되기 때문에 데이터의 정확성이 유지된다.

 

기본 키 제약 조건 ( PK ) - primary key

NOT NULL

참조 제약 조건 (외래키, 참조키 , FK) - foreign key references

연계 참조 무결성 제약 조건 - on delete cascade

유니크 제약 조건 ( 유니크 키, 후보 키) - unique

체크 제약 조건 - check

 

 

1. 참조 제약 조건

- 외래 키, 참조 키 라고도 부른다. FOREIGN KEY (FK)

-  외래 키로 연결되어 있으면 부모 - 자식 관계가 된다.

- 따라서 부모 테이블이 있어야 관계 설정이 가능하다.

 

테이블을 만들 때 생성하는 방법

부모의 PK를 자식이 외래키로 참조한다.

 

테이블을 만든 후 생성하는 방법

자식 테이블에 지정할 컬럼을 부모 테이블을 참조하는 외래키로 설정한다.

 

위의 경우는 부모의 키를 자식이 기본 키로 사용하고 있지 않기 때문에 '비식별 관계'

아래의 경우는 부모로부터 가져온 외래 키를 자식이 기본 키로 사용하기 때문에 '식별 관계'

(식별,비식별 - ERD 글 링크)

부모 테이블 (parent_table) , 자식 테이블 (iden_table) 둘은 식별 관계

 

 

2. 연계 참조 무결성 제약조건

- 연계 참조 : 부모 자식 관계

- 무결성 : 논리적으로 앞뒤가 맞는 것을 의미

- 부모 자식 간에 논리적으로 말이 맞지 않는 상황을 제약하는 것

- 부모 없는 자식이 발생했을 경우, 이를 해결하는 것

 

부모 테이블의 기본키를 외래키로 받는 자식테이블 생성

 

이 때 부모테이블을 지우려고 하면 지울 수 없다.

-- 해결방법 1) 자식을 먼저 지우고 부모를 지우는 방법(부모 자식 관계가 복잡하면 힘들다)

-- 해결 방법 2) 연계 참조 무결성 제약조건을 활용(ON DELETE CASCADE)

on delete cascade 라는 제약조건을 걸어준다.

=> 부모 데이터를 지우면 연관된 자식 데이터도 함께 지운다.

 

 

3. 유니크 제약조건

- 유니크 키, 후보 키

- 중복을 허용하지 않는다.

- 따라서 기본키(PK)가 될 잠재력이 있다. 그래서 후보키 라고도 부른다.

- 유니크 키 + not null = primary key

- 테이블에 무제한으로 들어간다.

ALTER TABLE [테이블 명] ADD CONSTRAINT [제약조건 종류]([적용 컬럼]);

 

여기에 만약 값을 insert 하려고 한다면

이런 에러가 날 것이다.

유니크 제약조건은 중복을 허용하지 않기 때문에 중복되는 값을 넣으면 에러가 난다.

 

 

4. 체크 제약 조건

정해진 조건을 만족하지 않으면 DB에 받지 않는다.

ALTER TABLE [테이블 명] ADD CONSTRAINT [제약조건 종류]([적용 컬럼] [조건])

ex) products의 products_price가 5000과 10000원 사이만 받는다.

produc_price가 5000원과 10000원 사이가 아니면 insert 할 수 없다.

 

그런데 이 조건은 거의 사용하지 않는 조건이다.

- 체크 제약 조건을 사용하지 않는 이유 -

1) 수정이 어렵다. 

2) 어떤 조건인지 확인이 어렵다.

- 어떤 조건을 적용시켜놨는지 확인 할 수 없다. 

그래서 이런 조건들은 프로그래밍 단에서 처리하는 것이 일반적이다.