[DB] 제약조건

touhou09·2025년 1월 13일
0

컴퓨터 이론

목록 보기
41/47

테이블을 만들 때는 테이블의 구조에 필수적인 제약조건을 설정해줘야 한다.
앞에서 계속 말했던 PK, FK가 대표적인 제약조건이라고 할 수 있다.

이메일, PHONE, ID 등 다른 열과 중복되지 않는 열에는 고유키(UNIQUE)를 지정할 수 있다.
회원의 키가 3M를 넘는 경우가 거의 없는 것 처럼 실수로 300이상의 수치 입력을 방지할 수 있도록 행 값의 범위를 제한하는 제약조건을 체크(CHECK)라고 한다.
국내에서만 진행하는 서비스의 경우 회원 대부분의 국적은 대한민국으로 고정될 것이다. 이러한 경우 국적을 일일이 입력하지 않아도 괜찮도록 제약조건으로 기본값(DEFAULT)를 설정할 수 있다.
또한 필수적으로 값을 입력해야하는 ID 등에는 NOT NULL 제약조건을 추가할 수 있다.

제약조건의 개념 및 종류

제약조건(CONSTRAINT)은 데이터의 무결성을 지키기 위해 제한하는 조건이다.
일단 데이터의 무결성은 '데이터에 결함이 없음'이란 의미이며, 대표적으로 처음에 설명한 ID의 중복 등이 있다.

이러한 결함을 방지하기 위해서는 회원 테이블의 ID를 기본 키(PRIMARY KEY, PK)로 지정할 수 있다.
기본 키의 조건은 '중복되지 않고 비어있지도 않음'이므로 실수로 중복된 아이디를 넣으려고 해도 입력이 불가능하게 된다.
기본 키 외에도 MYSQL에는 아래와 같이 대표적으로 지원하는 제약조건이 있다.

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • CHECK
  • DEFAULT
  • NULL

PRIMARY KEY

PK의 정의는 데이터를 구분할 수 있는 식별자 이다.
예를들면 ID, 학번, 사번 등이 이에 해당한다.

PK에 입력되는 값은 중복될 수 없으며, NULL이 입력될 수 없다.
특정 사이트의 회원가입 시 대부분 ID를 PK로 설정해 놓았기에 중복체크 등을 하는 것이다.

대부분의 테이블은 PK를 가져야 한다.
물론 PK가 없어도 테이블 구성은 가능하지만 실제로 사용되는 테이블은 PK를 설정해야 중복된 데이터가 입력되지 않는다.

PK로 생성한 것은 자동으로 클러스터형 인덱스가 생성된다.

클러스터형 인텍스는 나중에 알아본다.

한가지 더 기억할 사항은 PK는 테이블 당 1개만 가질 수있는 것이다.
여러 열을 지정할 수 없으며 하나의 열에만 PK를 설정해야 한다.
어떤 열에 설정해도 문법상으로는 문제 없으나 테이블 특성을 가장 잘 반영하는 열을 설정하는 것이 좋다.

FORERIGN KEY

FK는 두 테이블 사이의 관계를 연결해주고 그 결과 데이터의 무결성을 보장하는 역할을 한다.
FK가 설정된 열은 꼭 다른 테이블의 PK와 연결이 된다.

이전에 예시를 들었던 회원 테이블과 구매 테이블이 대표적인 PK-FK 관계이다.
여기서 PK가 있는 테이블을 기준 테이블이라고 부르고, FK가 있는 테이블을 참조 테이블이라고 부른다.

FK는 반드시 PK로 존재한다.
예를 들면 ID가 없으나 제품을 구매한 기록이 있는 경우는 절대로 발생할 수 없다는 것이다.
참조 테이블의 데이터는 모두 누가 구매했는지 확실히 알 수 있는 무결한 데이터가 되는 것이다.

만약 PK가 없는 경우 FK를 설정할 때 오류가 발생하는데, 이를 외래 키 제약조건 위반이라고 한다.

기준 테이블의 열이 변경되는 경우

기준 테이블의 값이 변경되는 경우 참조 테이블과의 정보가 일치하지 않게 되는데, 이런 경우를 방지하기 위해 PK - FK로 맺어진 후에는 평범한 방식으로는 기준 테이블의 열 이름이 변경/삭제되지 않는다.

이를 자동으로 변경하기 위해서는 ON UPDATE CASCADE를 사용해서 변경해야 한다.
또한 ON DELETE CASCADE를 사용하면 참조 테이블의 데이터도 같이 삭제되도록 한다.

기타 제약조건

UNIQUE

고유 키 제약조건은 중복되지 않는 유일한 값을 입력해야 하는 조건이다.
이는 PK와 유사하지만 차이점은 UNIQUE의 경우 NULL값을 허용한다는 것이다.

NULL 값은 여러개가 입력되어도 상관없고, PK는 테이블 당 1개지만 UNIQUE는 여러개 설정 가능하다.

만약 회원 테이블에서 ID를 PK로 사용한 경우 EMAIL 주소 등을 입력받는 경우 중복되지 않으므로 UNIQUE로 설정할 수 있다.

CHECK

체크 제약조건은 입력되는 데이터를 점검하는 기능을 한다.
예를 들어 평균 키(HEIGHT)에 마이너스 값이 입력되지 않도록 하거나, 연락처의 국번에 02, 031 010 중 하나만 입력되도록 할 수 있다.

DEFAULT

기본값 정의는 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 저장해 놓는 방법이다.
예를 들면 국내 서비스에서 국적을 '대한민국'으로 기본적으로 지정하는 등의 방법이 있다.

NULL 값 허용

NULL 값을 허용하기 위해서는 CREATE TABLE에서 생략하거나 NULL을 사용하고, 허용하지 않으려면 NOT NULL을 사용하도록 한다.

다만 PK가 설정된 열에는 NULL값이 있을 수 없으므로 생략하면 자동으로 NOT NULL로 인식된다.
또한 NULL은 공백이나 0과는 다른 정발 아무 것도 없다는 의미를 가지므로 주의해야한다.

profile
Engineer가 되기 위하여

0개의 댓글