[DB] 무결성 제약조건: 개체 무결성, 참조 무결성, CASCADE

안녕하·2023년 11월 15일
0

데이터베이스

목록 보기
2/21

관계 데이터 모델 제약

데이터베이스에 저장된 데이터의 무결성을 보장하고, 데이터베이스 상태를 일관되게 유지하는 조건

  • 데이터에 결함이 없도록 규칙을 정의 (무결성, 유효한 데이터)

  • 데이터베이스가 삽입, 삭제, 수정 연산으로 상태가 변하더라도 무결성 제약조건은 지켜져야 한다

  • 다음 두 가지 조건을 모두 만족시켜야 한다

    1. 개체 무결성 제약조건
      • 기본키에 대한 규칙
      • 각 릴레이션에 적용

    1. 참조 무결성 제약조건
      • 외래키에 대한 규칙
      • 연관된 릴레이션들에 적용



1. 개체 무결성 제약조건

기본키를 구성하는 모든 속성은 NULL 값을 가질 수 없다는 규칙

  • 관계 데이터 모델에서는 릴레이션에 포함된 튜플을 유일하게 구별해주는 기본키를 정의한다.
  • 기본키 값이 NULL이 되면 튜플의 유일성 판단이 불가 -> 기본키 목적 상실

코드

name varchar(20) not null
budget numeric(12, 2) not null



2. 참조 무결성 제약조건

외래키는 참조할 수 없는 값을 가질 수 없다는 규칙

  • 외래키는 다른 릴레이션의 기본키를 참조하고, 릴레이션 간의 관계를 표현
  • 외래키가 참조할 수 없는 값을 가지면 두 릴레이션을 연관시킬 수 없음
  • 외래키는 참조 가능한 값, 참조하는 릴레이션의 기본키 값을 가져야 함

예시

  • course 릴레이션의 dep_name 중 'Biology'가 있다면, department 릴레이션 중 'Biology'라는 튜플이 존재해야 한다

코드

foreign key (dept_name) references department

CASCADE

대학 강의 정보를 저장하는 테이블 course는 어떤 학부의 수업인지 저장하기 위해 dept_name이라는 속성이 있다. 이 dept_name은 department 테이블에 속한 값이어야 한다.

dept_name이 'Biology'라는 course 튜플이 있다면, 참조 무결성을 위해 'Biology'의 기본키 수정 및 삭제 액션이 거부된다.

이때 두 가지 방법으로 해결할 수 있다.

  1. null로 설정하거나, default를 지정해준다.

  2. CASCADE 옵션을 추가한다

    • 수정 및 삭제하려는 값을 참조하고 있는 튜플을 종속적으로 수정하거나 삭제할 수 있다.
    • department 테이블의 'Biology'의 PK인 id를 수정하면 course 튜플의 FK도 같이 수정된다.
    • ON UPDATE CASCADE
    • ON DELETE CASCADE

출처: 데이터베이스 개론, Database System Concepts

profile
세요

0개의 댓글