[database] 데이터 무결성

EMMA·2022년 6월 9일
0

데이터 무결성

"데이터베이스에 정확하고 유효한 데이터만 유지한다"

데이터의 정확성과 일관성을 유지하고 보증하는 것을 가리킴.
데이터베이스나 RDBMS 시스템의 중요한 기능이며,정확성, 일관성, 유효성이 유지되어야 한다.


보안 vs 무결성

보안은 권한이 없는 사용자로부터 데이터를 보호하는 것이고,
무결성은 권한이 있는 사용자의 잘못된 요구로부터 데이터를 보호하는 것이다.

무결성 제한의 유형

  • 개체 무결성
    • 모든 테이블이 기본키(PK, 고유 식별자)를 가진다
    • 기본키로 선택된 column은 고유해야 하고, 빈값은 허용하지 않는다
  • 참조 무결성
    • 2개의 연관 있는 테이블 간 일관성을 말한다
    • 참조키(FK)는 null이거나 참조하는 테이블의 기본키와 동일해야 한다
  • 도메인 무결성
    • 각 데이터는 데이터 타입(domain)에 맞아야 한다
    • 예를 들어 주민번호에는 전화번호가 들어가면 안된다
  • null 무결성
    • Null이 될 수 없도록 제한했다면 Null값이 존재해서는 안된다
  • 고유 무결성
    • 고유한 값을 가져야 하는 것으로 설정되었다면, 값들이 서로 달라야 한다.
    • 예를 들어 'email' 컬럼에 unique속성을 추가했다면, 등록되는 email은 모두 달라야 한다

관계형 데이터 모델이 기본적으로 포함하고 있는 제약 조건은 개체 무결성과 참조 무결성이며, 이 2가지가 만드시 만족되어야 DB 상태를 일관성 있게 유지할 수 있다.


개체 무결성 제약 조건

기본키를 구성하는 속성은 null 값을 가지면 안된다.

  • null은 아직 결정되지 않았거나, 모르는 값을 의미함
  • 모든 tuple(행)들을 유일하게 구별해주고 각 tuple을 accessible 하게 만드는 것이 기본키
ID고객 이름나이직업
A202206091홍길동20경찰
A202206092성춘향32개발자
A202206093이몽룡33교수
NULL홍길순24대학생
  • 이름이 '홍길순'인 tuple은 개체 무결성을 위반했음

참조 무결성 제약 조건

외래키는 참조할 수 없는 값을 가질 수 없다.
아래 예시의 경우, 주문번호 0001 - puhaha는 [고객]에 존재하지 않는다.
존재하지 않는 고객이 주문했다는 것은 옳지 않으므로 제약 조건을 위반한 것.

[고객]

고객 ID고객 이름나이직업
hong홍길동20경찰
spring성춘향32개발자
lee이몽룡33교수
soon홍길순24대학생

[주문] - 주문 고객은 [고객]의 고객 ID를 참조한다

주문번호주문 고객주문 제품수량
0001puhaha폼클렌징2
0002lee로션1

혹은, 아래와 같은 경우도 생각해야 한다.

  • 데이터 변경 시
    • 만약 [고객]에서 이몽룡의 ID가 lee -> dragon으로 바뀐다면, 이를 참조하고 있는 [주문]의 주문고객도 맞춰 변경되어야 한다
    • 그렇지 않다면 변경 연산을 수행할 수 없도록 해야 한다
  • 데이터 삭제 시
    • [주문]에서 주문 고객 lee의 주문내역이 존재함에도 불구하고, [고객]에 고객 ID lee가 없다면 부정확한 데이터가 된다
    • 삭제하지 않거나 [주문]에서 해당 내역을 함께 삭제해 참조 무결성 조건을 만족해야 한다

참고 자료
https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%AC%B4%EA%B2%B0%EC%84%B1
<데이터베이스 개론>, 김연희

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글