무결성 제약?

Terror·2025년 1월 17일

개요

  • 무결성의 제약의 기초와 이해를 해봅시다

무결성

  • 데이터의 정확성 또는 유효성을 의미
  • 일관된 데이터베이스 상태를 저의하는 규칙들을 묵시적으로 또는 명싱적으로 정의

무결성 제약 조건

1. 무결성 제약 조건(domain constraint)

  • 각 애트리뷰트(칼럼)값이 반드시 원자값 이어야함
    • 원자값이란, 더이상 쪼개지지않는 단위를 읽컫습니다
    • 즉 이런식으로 데이터가 하나씩 저장되어야하고, 배열이나 객체등이 저장되면 안된다는 뜻이다
  • 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있음
    • 칼럼값의 디폴트값,입력가능한 범위,조건을 제한 할 수 있다는 뜻이다

2. 키 제약조건(key constraint)

  • 키 애트리뷰트에 중복된 값이 존재해서는 안됨
    • 데이터베이스의 raw에서 key가 중복된다면 자신이 원하는 key의 값을 정확히 찾을 수 없기 떄문
    • 숫자 1,2 라는 key가 있을때는 2에 해당하는 value값을 가져 올 수 있지만
    • 숫자 2,2 라는 key가 있을때는 2라는 key가 2개 이기 떄문에, 중복된 값이 존재해서는 안된다는 것이다

3. 엔티티 무결성 제약조건(entity integrity constraint)

  • 엔티티:
    • 데이터 집합 (사원,부서,고객,상품 ...)
  • 릴레이션(Realation)의 기본키를 구성하는 어떤 칼럼도 Null값을 가질 수 없음
    • 릴레이션: RDB의 테이블을 의미
    • 즉 테이블의 기본키를 구성하는 칼럼은 Null일 수 없다는 의미
    • 중복도 되면 안됨
  • 대체 key에는 적용되지 않음
    • 대체 Key: 후보 Key중에서 기본 Key로 선택되지 않은 나머지 키를 의미
    • 주민등록 번호가 대체 Key라고 볼 수 있다
    • 즉 대체 Key도 고유성을 보장해야하지만, Null을 허용 할 수도 있다는 것이다

4. 참조 무결성 제약조건(referential integrity constraint)

  • 두 릴레이션의 연관된 튜플들 사이의 일관성을 유지하는데 사용됨

    • 튜플: RDB의 raw를 의미
    • 즉, 자식테이블에서 부모테이블의 key를 통해 참조할때, 부모테이블의 key가 반드시 존재 해야한다는 뜻이다
    • 이런식으로 유효한 데이터를 넣어야하지
    • 실제 존재하지않는 부모테이블의 Pk,Ak(대체 Key)값을 넣으면 안된다는 뜻이다
  • 릴레이션 R2의 외래키가 릴레이션 R1의 기본키를 참조할때, 참조 무결성 제약조건은 아래의 두조건중 하나가 성립되면 만족됨

    • 1) 외래 키의 값은 R1의 어떤 튜플의 기본 키 값과 같다
      • 자식 테이블의 fk값은, 부모 테이블의 특정 raw의 pk or ak와 같아야한다
    • 2) 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 Null값을 가진다
      • 외래키가 자식 테이블에서 PK가 아닌경우
        • Null 허용
        • 여기서는 허용이 가능하다
      • 외래키가 자식 테이블에서 PK인 경우
        • Null 불가
        • 이것은 불가능 하다

무결성 제약조건의 유지

  • 데이터베이스에 대한 갱신 연산 : 삽입,삭제,수정 연산
  • DBMS는 각각의 갱신 연산에 대해 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취함
  • DBMS는 외래 키가 갱신되거나, 참조된 기본 키가 갱신되었을 때 참조된 기본 키가 갱신되었을 때 참조 무결성 제약조건이 위배되지 않도록 조치

    DBMS?

    • 데이터베이스를 관리하고 운영하는 소프트웨어

참조 무결성 제약조건을 만족시키기위해서 DBMS가 제공하는 옵션

1. 제한(restriceted)

  • 위배를 야기한 연산을 단순히 거절
  • EX)
    • 자식 테이블은 현재, 부모 테이블의 DEPTNO를 기반하여 fk를 가지고있다
    • 이 상황에서 (3,개발,9)를 삭제해 버리면, 자식테이블의 (3426,박영권,3)의 key인 3이 부모테이블에서 실존하지 않게 되버리기 때문에 참조 무결성 제약조건을 위반 하는것이다

2. 연쇄(cascade)

  • 참조되는 (부모) 릴레이션 (테이블)에서 투플을 삭제하고, 참조하는 (자식) 릴레이션 (테이블)에서 이 투플을 참조하는 투플들고 함께 삭제
  • EX)
    • 부모 테이블에서 (3,개발,9)를 삭제하면 자식 테이블의 (3426,박영권,3), (3427,최종철,3)도 같이 삭제

3. Null값(nullify)

  • 참조되는 릴레이션 (부모 테이블)에서 투플을 삭제하고, 참조하는 릴레이션 (자식 테이블)에서 이 투플을 참조하는 투플들의 외래키에 Null값을 삽입
  • EX)
    • DEPARTMENT 릴레이션에서 (3, 개발, 9)를 삭제하면 EMPLOYEE 릴레이션에서 부서번호 3을 참조하는 두 번째 투플과 다섯 번째 투플의 부서번호에 널값을 삽입

4. Default값

  • Null값을 넣는 대신에, 디폴트값을 넣는다는것 제외하고 3번과 비슷함

나는 오늘 무엇을 알았는가?

  • 데이터의 무결성 제약 조건에는 4가지가 있다
  • 무결성 제약조건
    • 칼럼값이 반드시 원자값 이어야한다는 뜻
    • 즉 객체,배열등이 들어오면 안됨
  • 키 제약조건
    • 칼럼값에 들어가는 키는 중복되면 안됨
  • 엔티티 무결성 제약 조건
    • 테이블의 Key는 중복될수없고, Null이 들어올수없다
    • 대체 Key도 중복은 될 수 없지만, Null은 들어올수있다
  • 참조 무결성 제약조건
    • 자식 테이블의 fk는, 부모 테이블의 raw에 반드시 존재해야한다

참조 블로그

https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%EB%AC%B4%EA%B2%B0%EC%84%B1-%EC%A0%9C%EC%95%BD-%EC%A1%B0%EA%B1%B4-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC

profile
테러대응전문가

0개의 댓글