DB/이론

무결성 제약 조건

로파이 2022. 5. 2. 11:26

무결성 제약 조건 (Intergrity Constraint)
관계형 데이터 베이스에서 데이터 무결성을 지키기 위한 제한된 조건을 의미한다.

입력, 삭제, 갱신하는 경우 항상 무결성 제약 조건을 만족할 때만 실행하도록 허용한다.

 

종류 설명
도메인 제약조건 속성의 자료 값은 항상 도메인의 원자값을 가져야한다.
개체 무결성 제약조건 속성은 null이 아니고 중복이 불가능하다.
키 제약조건 키 값은 유일하게 튜플을 식별해야한다.
참조 무결성 제약조건 외부키 값은 반드시 기본키의 도메인 값이어야 한다.
의미 무결성 제약 조건 조건을 명시한 제약조건은 지켜야한다.

 

MySQL 에서 제공하는 제약조건

 

기본 키 제약 조건 PRIMARY KEY

기본 키 제약 조건에 해당하는 경우 해당 속성의 값은 중복을 허용하지않고 NULL을 허용하지 않는다.

기본 키로 생성하는 것은 자동으로 클러스터형 인덱스를 생성하게 된다. 기본 키는 둘 이상의 컬럼으로 지칭할 수 있다.

 

- 예시

CREATE TABLE userTbl(
    userId BITINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userName VARCHAR(24) NOT NULL,
    lastVisit DATETIME NULL
);

CREATE TABLE 정의에서 PRIMARY KEY를 컬럼 정의 수식에 추가한다. userId는 이제 중복을 허용하지 않으며 NULL값을 가질 수 없다.

 

키 명칭을 명명하여 생성하는 방식

CREATE TABLE userTbl(
    userId BITINT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(24) NOT NULL,
    lastVisit DATETIME NULL,
    CONSTRAINT PRIMARY KEY pk_usertbl_userid (userId)
);

CONSTRAINT PRIMARY KEY {alias} (column) 으로 테이블에 주 키 제약조건을 추가한다.

 

ALTER TABLE을 이용하여 정의 후에 추가하는 방식 

ALTER TABLE userTbl ADD CONTRAINT pk_usertbl_userid PRIMARY KEY (userId);

 

외래키 제약조건 FOREIGN KEY

외래키 제약조건은 참조하는 테이블의 키와 종속 테이블의 키가 항상 같고 존재해야하는 제약 조건이다.

 

예시

CREATE TABLE accountTbl
(
    accountId BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId BIGINT NOT NULL,
    cashAmount BIGINT NOT NULL,
    lastUpdate DATETIME NULL,
    FOREIGN KEY(userId) REFERENCES userTbl(userId)
);

accountTbl 테이블의 경우 userTbl의 userId를 참조하는 userId 컬럼이 존재한다. 이를 외래키 제약조건으로 설정하는 경우 FOREIGN KEY(column) REFERENCES {parent_table}(parent_table_column)으로 만들어준다.

 

마찬가지로 명명을 사용하는 CONSTRAINT 추가 방식 혹은 ALTER TABLE도 가능하다.

CREATE TABLE accountTbl
(
    accountId BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId BIGINT NOT NULL,
    cashAmount BIGINT NOT NULL,
    lastUpdate DATETIME NULL,
    CONSTRAINT fk_usertbl_accounttbl FOREIGN KEY(userId) REFERENCES userTbl(userId)
);
ALTER TABLE accountTbl 
ADD CONSTRAINT fk_usertbl_accounttbl FOREIGN KEY (userId)
REFERENCES userTbl(userId);

제약 조건에 따른 연쇄 행동

  • ON DELETE CASCADE : 기준 테이블의 데이터 삭제시 참조 테이블의 데이터도 삭제한다.
  • ON UPDATE CASCADE: 기준 테이블의 데이터 변경시 참조 테이블의 데이터도 변경한다.
ALTER TABLE accountTbl 
ADD CONSTRAINT fk_usertbl_accounttbl FOREIGN KEY (userId)
REFERENCES userTbl(userId)
ON UPDATE CASCADE;

 

UNIQUE 제약조건

해당 컬럼은 중복 값을 허용하지 않는다. PRIMARY KEY에 필요 조건이 된다. PRIMARY KEY와 다르게 NULL을 허용하는 특징이 있다.

 

- emailAddress 컬럼은 UNIQUE 제약조건을 만족해야한다.

CREATE TABLE userTbl(
    userId BITINT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(24) NOT NULL,
    lastVisit DATETIME NULL,
    emailAddress VARCHAR(30) NOT NULL UNIQUE,
    CONSTRAINT PRIMARY KEY pk_usertbl_userid (userId)
);

 

CHECK 제약조건

해당 컬럼의 값이 특정 조건을 만족해야한다. 다른 제약조건과 달리 값에 대한 명시적 조건을 의미한다.

CREATE TABLE userTbl(
    userId BITINT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(24) NOT NULL,
    lastVisit DATETIME NULL CHECK (YEAR(lastVisit) >= 2000),
    emailAddress VARCHAR(30) NOT NULL UNIQUE,
    CONSTRAINT PRIMARY KEY pk_usertbl_userid (userId)
);

 

DEFAULT 제약조건

레코드 삽입시 값을 입력하지 않았을 때 기본 값으로 지칭하는 방법이다.

 

region 컬럼은 DEFAULT로 'Kor' 값을 가진다.

CREATE TABLE userTbl(
    userId BITINT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(24) NOT NULL,
    lastVisit DATETIME NULL CHECK (YEAR(lastVisit) >= 2000),
    emailAddress VARCHAR(30) NOT NULL UNIQUE,
    region VARCHAR(30) NOT NULL DEFAULT 'Kor',
    CONSTRAINT PRIMARY KEY pk_usertbl_userid (userId)
);

 

NULL/NOT NULL 제약조건

해당 컬럼의 값이 NULL을 허용할지 말지를 결정한다.

 

'DB > 이론' 카테고리의 다른 글

RDBMS vs NoSQL  (0) 2022.05.02
트랜잭션 고립 수준에 따른 부정합 문제  (0) 2022.05.01
내부 조인과 외부 조인  (0) 2022.04.30
테이블 정규화  (0) 2022.04.29
클러스터형 인덱스 / 보조 인덱스  (0) 2021.11.29