데이터베이스에서 데이터 무결성의 중요성은 데이터 가치와 데이터 신뢰성 측면에서 설명할 수 있다.
데이터 가치는 업무에 필요한 의미 있는 정보를 제공하기 위한 목적으로 데이터를 활용하는 것을 의미하며
데이터 신뢰성은 항상 정확하고 오류가 없는 데이터가 데이터베이스에 저장될 것이라는 신뢰를 보장하는 것을 의미한다.
데이터베이스의 무결성은 무엇으로부터의 무결성일까? 개발 환경일까? 데이터베이스 자체일까?
정답은 구축하고자 하는 비즈니스의 의미이다.
우리가 구축하고자 하는 대상 데이터베이스는 업무를 통해 발생하는 데이터를 저장, 검색, 수정 등을 하는 용도로 사용된다. 즉, 비즈니스로부터 데이터가 입력되고 이용된다는 의미이다.
일반적으로 트랜잭션을 정의할 때 '업무적으로 의미 있는 논리적인 일의 처리 단위'라고 정의한다. 이것을 영어로 표현하면 'A Logical Unit of Work'로 표현할 수 있다. 논리적인 일의 처리 단위라는 것은 실제로 트랜잭션이 처리될 때 구분되는 단위와 다른 즉, SQL 문장 개별과는 다른 비즈니스를 처리하기 위한 단위로 트랜잭션 하나가 정의된다는 것이다.
데이터에 대한 무결성은 이러한 트랜잭션을 유지시켜주는 최소한의 장치를 엔티티 타입, 관계, 속성 등에 걸어주고 그것을 유지할 수 있도록 하는 것을 의미한다.
From. 아는만큼 보이는 데이터베이스 설계와 구축
데이터 무결성은 데이터가 정확하고 일관성 있는 상태를 유지하는 것을 의미한다. 정확성이란 중복이나 누락이 없는 상태이고 일관성이란 원인과 결과 의미의 연속성이 보장된, 변하지 않는 상태이다.
데이터베이스에서 데이터 무결성은 다음과 같은 규칙을 따르는 것으로 유지된다.
- 개체 무결성(Entity Integrity): 테이블의 기본키(primary key)는 NULL이나 중복된 값을 허용하지 않는다.
- 참조 무결성(Referential Integrity): 테이블 간의 관계를 유지하기 위해 외래키(foreign key)를 사용한다. 외래키 값은 참조하는 테이블의 기본키 값과 동일해야 하며, 참조하는 테이블에서 해당 값이 삭제되면 참조하는 테이블에서도 자동으로 삭제되어야 한다
- 도메인 무결성(Domain Integrity): 각 컬럼의 데이터 유형과 범위가 정해져 있으며, 이를 벗어나는 데이터는 입력될 수 없다.
- 무결성 제약 조건(Constraint Integrity): 데이터베이스 설계시 무결성 제약 조건을 정의하여 데이터의 일관성과 정확성을 유지한다. 이러한 제약 조건은 테이블의 생성 시점에 정의되며, 데이터 입력 및 수정시에도 유지된다.
- 속성 무결성: 속성의 값은 기본값, Null 여부, 지정된 도메인(데이터 타입, 길이) 규칙을 준수하여 존재해야 한다
- 사용자 무결성: 사용자의 의미적 요구사항을 준수해야 한다
👉도메인 무결성과 속성 무결성은 비슷하지만 다른 개념이다.
도메인 무결성은 데이터베이스 테이블의 각 컬럼이 가질 수 있는 값의 범위나 유형을 제한하는 규칙을 말한다. 즉, 각 컬럼이 가질 수 있는 값의 도메인이 무결성 규칙에 따라 제한되는 것이다. 예를 들어, 성별 컬럼의 도메인 무결성 규칙은 'F' 또는 'M' 값만 허용한다.
반면에 속성 무결성은 데이터베이스 테이블의 각 컬럼이 가질 수 있는 값이 정확하고 유효한 데이터 값인지를 검증하는 규칙을 말한다. 속성 무결성 규칙은 각 컬럼의 데이터 유형, 범위, NULL 값 허용 여부 등과 같은 속성에 적용된다. 예를 들어, 나이 컬럼의 속성 무결성 규칙은 음수 값이나 문자열 데이터가 입력되지 않도록 하고, 일정한 범위 내의 숫자 데이터만 입력될 수 있도록 하는 것이다.
제약명 | 종류 |
개체 무결성 | PK, Unique Index |
참조 무결성 | FK |
속성 무결성 | CHECK, NULL/ NOT NULL, DEFAULT |
사용자 정의 무결성 | Trigger, User Define Data Type |
DBMS에서 제공하는 각각의 무결성 요소는 다음과 같다
DBMS 요소 | 내용 |
Primary Key | - 지정된 컬럼들이 유일성이 위배되는 일이 없음을 보장함 - PK는 Null 값이 될 수 없음 |
Unique Index | - 다중의 보조 키 개념을 지원함 - PK와 마찬가지로 지정된 컬럼들의 유일성이 위배되지 않음을 보장함 - Unique는 Null 허용 |
Foreign Key | - 테이블 간의 논리적 관계가 유지됨을 보장함 - FK 값은 반드시 참조하는 테이블의 PK 값으로 나타나야 함 - FK 값은 Null 값을 가질 수 있음 - Cascaded Option: Master 삭제 시 레코드가 함께 삭제됨 - Nullified Option: Master 삭제 시 해당 값을 Null로 세팅함 - Restricted Option: FK가 존재하면 Master 레코드를 삭제할 수 없음 |
Data Type | - 데이터의 형을 제한함으로서 데이터 무결성을 유지함 |
Check 제약 | - 데이터를 추가할 때마다 SQL 서버가 해당 값이 해당 컬럼들에 지정된 Check 제약을 위배하는지를 검사함으로써 데이터 무결성 유지 |
Default | - 특정 컬럼에 대해 명시적으로 값을 입력하지 않은 경우에 SQL 서버가 자동적으로 지정된 값을 삽입할 수 있도록 함으로써 데이터 무결성 유지 - Insert 또는 Update에는 Default 키워드를 사용할 수 있음 |
Trigger | - 테이블의 내용을 변경하려는 특정 사전(DB 연산) 에 대해서 DBMS가 미리 정의된 일련의 행동(DB 연산)들을 수행하는 매커니즘 - DBMS 서버에 의해 자동적으로 호출됨 - 데이터에 대한 변경을 시도할 때마다 자동적으로 호출됨 (데이터의 변경 전 상태와 변경 후의 상태를 사용) - 트랜잭션의 철회 (Rollback)와 같은 동작을 수행할 수 있음 - 저장 프로시져의 특별한 형태로서 SQL의 모든 기능을 이용할 수 있음 - 참조 무결성을 위해 사용될 수도 있음. 참조 무결성이 위배되는 경우에 원하는 동작을 하도록 트리거를 구성하면 됨 |
이러한 데이터 무결성 규칙은 데이터베이스에서 데이터의 정확성과 일관성을 유지하고, 잘못된 데이터 입력을 방지함으로써 데이터의 신뢰성을 보장한다.