데이터 무결성
[해당 글은 공부 목적으로 아래 사이트 및 블로그 등을 참고하여 작성되었습니다.]
📌 데이터 무결성이란
데이터의 정확성, 일관성, 유효성 등이 유지되고 있는 상태를 의미한다. 정확성은 중복이나 누락이 없는 상태를 뜻하고, 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 뜻한다.
만약 데이터베이스에서 데이터 무결성 설계를 하지 않는다면 테이블에 중복된 데이터 존재, 부모와 자식 데이터 간의 논리적 관계 깨짐, 잦은 에러와 재개발 비용 발생 등과 같은 문제가 발생할 것이다.
따라서, DBMS에서 데이터의 무결성이 유지되는 것은 중요한 사항이며, 주로 데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지한다.
📌 데이터 무결성 제약조건
🔎 개체 무결성(Entity integrity)
개체의 유일성을 보장하기 위한 무결성으로 반드시 보장되어야 하므로 기본 키(Primary key) 제약 조건과 Unique 제약 조건 등을 이용하여 보장하는 것이 좋다.
📢 기본 키 제약
데이터베이스에서 가장 중요한 무결성 조건으로 식별자 값은 NOT NULL이고, 유일해야 하며, 변하면 안된다. 기본 키가 없는 테이블 운영은 데이터 조작 시 이상 현상이 발생하거나 조인에 의해 집계된 수치가 잘못 계산될 가능성이 높다.
📢 Unique 제약
개체 무결성은 식별자 외에 Entity 내에 후보키 대상인 Unique 컬럼도 대상이다. 즉, 식별자가 아니더라도 유일성을 보장해야 하는 컬럼이 있다면 유일성을 보장해야 한다. 단, 기본 키 제약과 차이점은 경우에 따라서 NULL이 허용된다.
🔎 참조 무결성(Referential integrity)
두 엔티티 사이의 관계 규칙을 정의하기 위한 제약 조건으로 데이터가 삽입, 수정, 삭제될 때 두 엔티티의 튜플들 사이의 정합성과 일관성을 유지하는 데 사용된다. 참조 무결성 제약 조건은 참조하는(자식) 엔티티의 튜플이 참조되는(부모) 엔티티의 튜플을 참조하려면 참조되는 튜플이 반드시 그 엔티티(부모) 내에 존재하여야 한다는 것이다. (참조하는 값이 반드시 참조되는 곳에 있어야 한다는 것)
📢 입력 참조 무결성
구분 | 설명 |
DEPENDENT | 참조되는(부모) 테이블에 PK 값이 존재할 때만 입력을 허용 |
AUTOMATIC | 참조되는(부모) 테이블에 PK 값이 없는 경우는 PK를 생성 후 입력 |
DEFAULT | 참조되는(부모) 테이블에 PK 값이 없는 경우 지정된 기본값으로 입력 |
CUSTOMIZED | 특정한 조건이 만족할 때만 허용 |
NULL | 참조되는(부모) 테이블에 PK 값이 없는 경우 외부키를 NULL 값으로 처리 |
NO EFFECT(NO ACTION) | 조건 없이 입력을 허용 |
📢 수정/삭제 참조 무결성
구분 | 설명 |
RESTRICT | 참조하는(자식) 테이블에 PK 값이 없는 경우 삭제/수정 (대상 개체를 참조하는 개체가 있을 경우 변경이 거부됨) |
CASCADE | 참조되는(부모) 테이블과 참조하는(자식) 테이블 모두 연쇄적 삭제/수정 |
DEFAULT | 참조되는(부모) 테이블의 수정을 항상 허용하고 참조하는(자식) 테이블의 외부키를 지정된 기본값으로 변경 |
CUSTOMIZED | 특정한 조건이 만족할 때만 수정/삭제 허용 |
NULL | 참조되는(부모) 테이블의 수정을 항상 허용하고 참조하는(자식) 테이블의 외부키를 NULL 값으로 수정 |
NO EFFECT(NO ACTION) | 조건 없이 삭제/수정 허용 |
🔎 도메인 무결성(Domain integrity)
테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로 필드의 타입, 유효 값, Null 값 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는지 확인하는 조건
예1) Date 타입 값으로 20500230 이 입력된 경우 -> 2월 30일은 유효한 날짜가 아님
예2) NUMBER 타입 필드에 문자가 입력될 수 없다.
예3) 상품 테이블에 상품명이 필수 입력 사항이면 NULL 값은 존재할 수 없다.
예4) 상태 값으로 1, 2, 3을 허용했을 때, 이 외의 숫자가 입력될 수 없다.
🔎 Null 무결성(Null integrity)
테이블의 특정 속성 값이 Null이 될 수 없는 조건
🔎 고유 무결성(Unique integrity)
테이블의 특정 속성에 대해 각 레코드들이 갖는 값들이 서로 달라야 하는 조건
🔎 키 무결성(Key integrity)
하나의 테이블에는 적어도 하나의 키가 존재해야 하는 조건
🔎 관계 무결성(Relationship integrity)
테이블의 어느 한 레코드의 삽입 가능 여부 또는 한 테이블과 다른 테이블의 레코드들 사이의 관계에 대한 적절성 여부를 지정한 조건
References:
https://cocoon1787.tistory.com/778