[DB] 04. 무결성과 제약조건

[DB] 04. 무결성과 제약조건

1. 무결성(Integrity)이란?

무결성은 데이터가 논리적으로 올바르게 유지되는 상태를 의미한다. 저장은 됐는데 믿을 수 없는 데이터가 쌓이는 순간부터 서비스는 유지가 어려워진다.

그래서 DB는 데이터를 그냥 받아들이지 않고, “지켜야 할 규칙”을 정해두고 그 규칙을 위반하면 저장 자체를 막는다.

2. 무결성을 DB에서 보장하는 이유

애플리케이션 코드에서도 검증을 할 수 있다. 하지만 코드 검증만 믿으면 빈 구멍이 생긴다.

  • 다른 프로그램/관리 툴이 DB에 접근할 수 있다
  • 실수로 잘못된 쿼리를 실행할 수 있다
  • 검증 로직이 분산되면 일관되게 유지하기 어렵다

그래서 중요한 규칙은 DB 차원에서 한 번 더 막아두는 편이 안전하다.

3. 개체 무결성(Entity Integrity)

개체 무결성은 각 행이 고유하게 식별되어야 한다는 규칙이다. 이를 보장하는 가장 기본 장치가 PK다.

  • PK는 중복될 수 없다
  • PK는 NULL이 될 수 없다

PK가 없으면 “이 행이 무엇인지”를 DB가 확신할 수 없다. 그래서 PK는 설계의 출발점이 된다.

4. 참조 무결성(Referential Integrity)

참조 무결성은 테이블 간 관계가 깨지지 않도록 보장하는 규칙이다. 예를 들어 orders.user_id가 users.id를 참조한다면, orders에 존재하지 않는 회원 ID가 들어오면 안 된다.

FK 제약을 걸어두면 DB가 이를 자동으로 검사한다.

5. 도메인 무결성(Domain Integrity)

도메인 무결성은 컬럼에 들어올 수 있는 값의 범위를 제한하는 규칙이다.

  • 데이터 타입(INT, VARCHAR 등)
  • NULL 허용 여부
  • 값의 범위(CHECK)

예: 나이는 음수가 될 수 없고, 이메일은 특정 형식만 허용할 수 있다. 이런 규칙이 없으면 데이터는 금방 의미를 잃는다.

6. 제약조건(Constraint)

무결성을 실제로 구현하는 장치가 제약조건이다. 대표적인 제약조건은 다음과 같다.

제약조건 의미
NOT NULL 값이 반드시 존재해야 함
UNIQUE 중복 불가
PRIMARY KEY 개체 무결성 보장(중복/NULL 불가)
FOREIGN KEY 참조 무결성 보장(참조 대상 존재 필요)
CHECK 값의 범위/규칙 제한
DEFAULT 값이 없을 때 기본값 설정

7. 제약조건을 어디까지 DB에 둘 것인가

모든 규칙을 DB에 넣을 필요는 없다. 하지만 기준은 있다.

  • 데이터 구조 자체와 관련된 규칙(중복, NULL, 참조)은 DB에서 보장하는 편이 안정적이다
  • 자주 바뀌는 비즈니스 규칙은 코드에서 처리하는 편이 유연하다

8. 정리

  • 무결성은 데이터가 말이 되게 유지되는 상태다
  • PK는 개체 무결성, FK는 참조 무결성을 보장한다
  • 타입/NULL/CHECK는 도메인 무결성을 보완한다
  • 제약조건은 DB 차원의 검증 장치다