데이터 무결성이란 데이터의 정확성과 일관성을 유지하고 보장된 상태를 의미합니다. 여기서 정확성이란 중복이나 누락이 없는 상태라고 말할 수 있습니다. 또 일관성이란 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태라고 설명됩니다. 데이터베이스에서 데이터 무결성이 갖는 중요성은 데이터 가치와 데이터 신뢰성 측면으로 설명할 수 있습니다. 데이터 가치는 업무에서 사용자에게 의미 있는 정보를 제공하는 것이 목적입니다. 또 데이터 신뢰성은 항상 정확하고 오류가 없는 데이터가 데이터베이스에 저장되어 있어 신뢰성 있는 데이터를 제공한다는 의미를 가지고 있습니다.
데이터 무결성 설계를 안 했을 때의 문제점
모든 데이터 무결성을 DBMS로 보장 받을 수 없습니다. 어차피 업무적인 데이터 무결성은 애플리케이션 로직에 포함된 상태로 수행되어야 합니다. 그러나 데이터 구조상의 무결성이나 업무적으로 처리되어야 할 일반화된 무결성은 데이터베이스에서 처리할 수 있습니다.
그렇다면 데이터 무결성을 고려하지 않고 데이터베이스를 설계하면 우선 데이터베이스 테이블에 중복된 데이터가 존재할 가능성이 높아집니다. 자세히 설명하면 동일한 데이터가 두 번 이상 반복 발생해도 데이터베이스에는 확인 과정을 거치지 않고 바로 입력됩니다. 따라서 업무적으로 한 번 입력되는 것만으로 충분히 의미 있는 데이터가 두 번 입력되는 결과가 나타납니다.
다음으로 참조 무결성 제약 조건에 의해 지켜져야 할 부모와 자식 데이터 간의 논리적 관계가 깨지게 됩니다. 이는 데이터모델의 관계를 실제 데이터베이스에서 참조 무결성 제약 조건으로 걸지 않았을 때 나타나는 현상입니다. 실제로 많은 프로젝트에서 성능상의 이유로 FK를 걸지 않습니다. 그러나 이는 부모 데이터를 참조하지 않고 자식 테이블에 데이터를 입력하는 결과를 초래하게 되어 업무적으로 무의미한 데이터를 입력하는 결과를 초래하게 됩니다.
마지막으로 컬럼 무결성 제약 조건에 의해 지켜져야 할 컬럼 기본값, Null 값 등이 비정상적으로 데이터베이스에 존재하게 됩니다. 다시 말해 데이터베이스 컬럼 값으로 지정할 수 있는 Default Value, Check Constraint, Null / Not Null을 걸지 않아 컬럼 데이터가 깨진다는 뜻입니다.
무결성의 종류
1. 개체(엔티티) 무결성 [ 범위 : 테이블 ]
PK로 데이터의 중복(Duplicate)과 누락(Null)을 방지하는 역할을 수행합니다. 즉 PK로 엔티티 무결성을 유지하는 역할을 합니다.
2. 참조 무결성 [ 범위 : 테이블와 테이블 ]
참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것을 말합니다. 기본키와 참조 키 간의 관계가 항상 유지되도록 보장하는 것을 의미한다고 할 수 있습니다. 만약 Member에서 Team를 참조(FK)하고 있다면 Member에 들어가는 Team의 PK를 반드시 참조해야 데이터 무결성을 유지할 수 있습니다. 이렇게 자신과 관계된 엔티티 타입의 특정값을 참조하면서 처리되어야 하는 무결성 규칙이 참조 무결성입니다.
3. 속성(도메인) 무결성 [ 범위 : 컬럼 ]
만약 VARCHAR로 선언된 컬럼이 있다면 이 컬럼에는 NUMBER 형식이 들어가면 안 된다는 무결성 규칙이 있습니다. PK는 NOT NULL로 반드시 데이터가 들어가야 한다는 의미를 가지고 있습니다. PK에 NOT NULL이란 제약 조건이 걸리지 않고 NULL이 걸리면 PK가 없는 경우를 테이블에서는 에러로 방어하지 않고 처리해버리는 결과가 나타날 수 있습니다.
참고자료
'Computer Science > DataBase' 카테고리의 다른 글
Spring Mongo Transaction 적용기 (0) | 2023.09.25 |
---|---|
[MySQL] Datetime 기준으로 조회하기 (0) | 2021.11.19 |
[DataBase] 데이터베이스란? (0) | 2021.09.04 |
[MySQL] DELETE (0) | 2021.08.10 |
[MySQL] UPDATE (0) | 2021.08.10 |
댓글