피드로 돌아가기
Dev.toDatabase
원문 읽기
SQL 제약조건 9가지를 테이블 설계에 적용해 데이터 무결성과 관계성을 보장하는 방법
Creating Tables using constraints
AI 요약
Context
데이터베이스 테이블을 생성할 때 제약조건이 없으면 중복된 ID, 빈 필드, 음수 가격, 고아 레코드 같은 데이터 오류가 발생한다. 제약조건 없이 데이터를 입력받으면 애플리케이션 로직에서 일일이 검증해야 하므로 코드가 복잡해진다.
Technical Solution
- PRIMARY KEY 도입: 학생 테이블에서 id를 SERIAL PRIMARY KEY로 설정해 각 행을 유일하게 식별
- NOT NULL 적용: 직원 테이블의 name과 email 필드를 NOT NULL로 설정해 필수 정보 누락 방지
- UNIQUE 제약: 사용자 테이블의 username과 email을 각각 UNIQUE로 지정해 중복 가입 차단
- CHECK 규칙 설정: 상품 테이블에서 price > 0, stock >= 0으로 음수 입력 방지
- DEFAULT 값 지정: 주문 테이블의 status를 'pending'으로, created_at을 CURRENT_TIMESTAMP로 자동 설정
- 복합 UNIQUE 구성: 등록 테이블에서 student_id와 course_id 조합을 UNIQUE로 지정해 중복 수강 신청 차단
- FOREIGN KEY 연결: 직원 테이블의 department_id를 부서 테이블의 id와 외래키로 연결해 부서-직원 관계 유지
- CASCADE 옵션 적용: 외래키에 ON DELETE CASCADE와 ON UPDATE CASCADE를 추가해 부서 삭제/수정 시 관련 직원 데이터도 자동 처리
Key Takeaway
제약조건은 데이터베이스 레벨에서 데이터 신뢰성을 보장하므로 애플리케이션이 검증 로직을 중복으로 구현할 필요가 없다. CASCADE를 포함한 관계 설정은 데이터 일관성을 자동으로 유지하는 핵심 설계 원칙이다.
실천 포인트
SQL 테이블을 설계할 때 PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT, FOREIGN KEY 중 적절한 제약조건을 각 열에 적용하면 잘못된 데이터 입력을 데이터베이스 레벨에서 차단할 수 있다. 부서-직원처럼 부모-자식 관계가 있는 테이블에는 CASCADE 옵션을 함께 설정해 관계된 데이터가 일관되게 갱신되도록 해야 한다.