본문 바로가기

Programming/데이터 베이스

릴레이션과 무결성 제약

1. 릴레이션(Relation)의 개념

1) 수학적 정의

  • 릴레이션: 카티션 프로덕트(Cartesian Product)인 D1×D2××Dn 의 부분집합
    • n-투플: , di Di
  • 차수(degree): 릴레이션의 속성 개수
  • 카디널리티(cardinality): 릴레이션의 투플(행)의 수

2) 개념적 정의

  • 릴레이션 스키마: 릴레이션의 구조와 속성 이름 정의
    • 표기법: 릴레이션이름(속성1, 속성2, ..., 속성N)
    • 정적 성질 (내포, Intension)
  • 릴레이션 인스턴스: 특정 시점의 릴레이션 데이터를 의미
    • 삽입, 삭제, 갱신에 따라 동적으로 변화 (외연, Extension)

2. 릴레이션의 특성

  1. 투플의 유일성:
    • 릴레이션 내에 동일한 투플이 존재할 수 없음.
    • 키(key)를 통해 보장.
  2. 투플의 무순서성:
    • 투플들의 순서는 중요하지 않음.
  3. 애트리뷰트(속성)의 무순서성:
    • 애트리뷰트 순서가 다르더라도 동일 릴레이션으로 간주.
  4. 속성의 원자성:
    • 각 속성 값은 더 이상 분해되지 않는 원자 값이어야 함.
  5. 기타:
    • 하나의 릴레이션은 한 가지 레코드 타입만 포함.
    • 속성의 데이터 타입은 동일해야 함.
    • 속성 이름은 릴레이션 내에서 고유해야 함.

3. 릴레이션의 키

1) 키의 정의

  • 릴레이션에서 투플을 고유하게 식별할 수 있는 속성(또는 속성 집합).

2) 키의 유형

  1. 수퍼키(Super Key):
    • 투플을 고유하게 식별할 수 있는 속성 집합.
    • 유일성을 만족하지만 최소성을 보장하지 않음.
    • 예: (회원번호, 주민등록번호), (회원번호, 등급)
  2. 후보키(Candidate Key):
    • 투플을 고유하게 식별하는 최소한의 속성 집합.
    • 유일성과 최소성을 만족.
    • 릴레이션에는 최소 한 개 이상의 후보키 존재.
    • 예: (회원번호), (주민등록번호)
  3. 기본키(Primary Key):
    • 후보키 중 릴레이션에서 대표로 선정된 키.
    • NULL 값을 가질 수 없음.
    • 예: 신용카드번호
  4. 대체키(Alternate Key):
    • 후보키 중 기본키로 선정되지 않은 키.
    • 예: 주민등록번호 (기본키가 신용카드번호인 경우)
  5. 외래키(Foreign Key):
    • 다른 릴레이션의 기본키를 참조하는 속성.
    • 참조하는 릴레이션의 기본키와 동일한 도메인.
    • 값은 참조되는 기본키 값이거나 NULL.

3) 키들의 포함 관계

  • 수퍼키 ⊇ 후보키 ⊇ 기본키
  • 키들의 포함 관계
  • 관계 데이터 모델에서의 키

4. 무결성 제약

1) 데이터 무결성

  • 데이터의 정확성과 유효성을 보장.
  • 데이터베이스 상태가 일관성을 유지하도록 조건 설정.
  • DBMS가 자동으로 검사하여 응용 프로그램에서 별도로 확인할 필요가 없음.

2) 개체 무결성 제약조건 (Entity Integrity Constraint)

  • 기본키 속성은 NULL 값을 가질 수 없음.
  • NULL 값 의미:
    1. 값이 알려지지 않음 (unknown value)
    2. 해당 없음 (inapplicable)

3) 참조 무결성 제약조건 (Referential Integrity Constraint)

  • 외래키 값은 반드시 참조되는 릴레이션의 기본키 값이거나 NULL이어야 함.
  • 외래키와 기본키 사이 관계:
    • 외래키 값 기본키 값
    • 또는 외래키 값 = NULL

무결성 제약 유지 시 고려사항

  1. 삽입:
    • 참조하는 릴레이션에 존재하지 않는 값을 삽입하면 제약조건 위배.
    •  
      참조되는 경우


    • 참조하는 경우
  2. 삭제:
    • 참조되는 투플 삭제 시 다른 릴레이션의 무결성 위배 가능.

참조 무결성을 유지하기 위한 DBMS 옵션

  1. 제한(Restricted)
    • 동작: 참조 무결성을 위배하는 연산을 단순히 거절합니다.
    • :
      • 상황: 부서 릴레이션에서 (3, 개발, 9)를 삭제하려고 함.
      • 문제: 부서번호 3을 참조하는 사원 릴레이션의 레코드(박영권, 최종철)가 존재.
      • 결과: 삭제 연산이 거절됨.
  2. 연쇄(Cascade)
    • 동작: 참조되는 릴레이션의 레코드 삭제 시, 이를 참조하는 릴레이션의 레코드도 자동으로 삭제합니다.
    • :
      • 상황: 부서 릴레이션에서 (3, 개발, 9)를 삭제하려고 함.
      • 문제: 부서번호 3을 참조하는 사원 릴레이션의 레코드(박영권, 최종철)가 존재.
      • 결과: 부서 릴레이션의 (3, 개발, 9)와 함께 사원 릴레이션의 해당 레코드들도 모두 삭제됨.
  3. NO ACTION (= Restricted)
    • 동작: 참조 무결성을 위배하는 연산을 거절합니다(제한 옵션과 동일한 동작).
    • :
      • 상황: 부서 릴레이션에서 (3, 개발, 9)를 (5, 개발, 9)로 변경하려고 함.
      • 문제: 사원 릴레이션에서 부서번호 3을 참조하는 레코드(박영권, 최종철)는 변경되지 않음.
      • 결과: 변경 연산이 거절됨.

참조 무결성 유지를 위한 DBMS 옵션