Dbms 데이터 무결성 유지 방법

데이터 무결성 제약(Integrity Constraints)

데이터 무결성 제약조건이란 테이블(릴레이션)에 원치 않은 데이터를 입력/수정/삭제하지 못하게 제약하는 것으로, 사용자에 의해 발생할 수 있는 잘못된 데이터 조작이 실행되지 않게 합니다. 이는 데이터의 정확성과 유효성을 유지하는 것을 의미하며 데이터베이스를 정확하고 일관된 상태로 머물 수 있도록 지정된 연산만 사용자가 수행할 수 있도록 제한합니다. 따라서 무결성 제약 조건은 데이터의 정확성을 유지하기 위한 규칙이며 데이터베이스 안에 모든 데이터는 무결성 제약 조건을 지켜야 합니다.

DBMS는 데이터베이스가 데이터가 갱신될 때 자동적으로 무결성 검사를 실시하며 응용 프로그램이나 사용자는 무결성 조건을 검사할 필요가 없습니다. 또한, 지정한 제약조건에 대한 모든 정보를 시스템 카탈로그에 저장되며, 원할 때 언제든지 기능을 활성화/비활성화 할 수 있습니다. 테이블의 하나의 컬럼에 여러 개의 제약조건을 설정할 수 있으며, 무결성 제약조건은 다음의 6가지가 있습니다.

PRIMARY KEY

실체 무결성 또는 개체 무결성이라 부릅니다. 기본 키 제약조건은 널 값과 중복된 값을 한 테이블에서 가질 수 없음을 나타냅니다. 기본 키는 데이블 간의 관계를 정의하기 위해 테이블 내에서 유일한 값을 가져야 하며, 널 값도 가져서는 안 됩니다. 즉, 중복과 널 값을 가질 수 없는 제약조건입니다. (참고: 널 값이란 아직 알려지지 않은 값으로 정보의 부재를 뜻하며 널 값이라고 데이터 공간이 없는 것이 아니라 1byte의 공간을 차지합니다.)

FOREIGN KEY

참조 무결성 또는 외래 키 제약조건이라 부릅니다. 외래 키 제약조건은 두 테이블 간의 관계를 선언함으로써, 데이터의 무결성을 보장해주는 역할을 합니다. 외래 키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됩니다. 이는 참조하는 테이블의 기본 키의 값과 외래 키의 값이 일치해야 되며, 기본키와 외래키는 테이블 간의 관계를 나타냅니다. 테이블 관계는 일대일, 일대다, 다대다 관계가 있습니다.

CHECK 무결성

CHECK 제약조건은 입력되는 데이터를 점검하는 기능을 수행합니다. 컬럼에 입력되는 값 들의 조건을 검사하여 해당 조건의 값만 입력될 수 있도록 제약하는 무결성입니다. 이는 컬럼에 사용되는 값은 정의된 데이터 타입과 일치해야 하는 무결성의 발전형입니다. 따라서 미리 정의되어 있는 데이터 타입을 벗어난 값을 컬럼에 사용할 수 없습니다.

UNIQUE 제약조건

테이블내의 컬럼에서 기본키가 아니더라도 컬럼의 모든 값이 유일해야 하는 경우 Unique key로 지정해 유일한 값이 저장될 수 있도록 제한하는 제약입니다.

Not Null 제약조건

속성은 기본(Default) 값으로 널 값을 가질 수 있기 때문에 어떠한 속성에 널 값을 허용하지 않으려면 'not null' 제약을 명시해야 합니다. not null 제약조건은 기본키는 반드시 명시되어야 합니다. 또한 필요한 속성에 not null 제약을 부여할 수도 있습니다.

Default 제약 조건

디폴트 제약조건은 컬럼에 아무런 값을 입력하지 않으면 기본적으로 입력되는 값을 지정할 때 사용하는 제약 조건입니다. 이는 널 값 대신 특정 값을 기본적으로 지정할 때 사용하는 방법으로 디폴트 제약조건이 걸려 있는 컬럼에 값을 입력하지 않으며 자동으로 지정한 값이 채워집니다.

참조 무결성(외래 키 무결성)을 만족시키기 위한 DBMS 처리 방법

데이터베이스에 대한 갱신(데이터의 삽입, 수정, 삭제) 연산이 일어날 때는 무결성 제약 조건을 유지해야 합니다. 이런 무결성을 유지하기 위해 DBMS는 무결성 제약조건들을 만족하도록 필요한 조치를 수행합니다. 이는 참조 무결성에도 적용되는데 기본 키와 외래 키로 연결된 테이블 간의 데이터 갱신에 무결성을 유지시킵니다. 즉, DBMS에서 기본 키와 외래 키로 연결된 테이블 간에 데이터가 갱신될 때 참조 무결성 제약조건이 위배되지 않도록 무결성 제약조건을 부여할 수 있습니다. 이 때 부여할 수 있는 제약조건은 다음과 같다.

  1. 제한(Restructed)
  2. 연쇄(Cascade)
  3. 널값(Nullify)

참조 무결성을 사용하기 위해서는 우선 테이블 간의 관계 형성을 실시해야 합니다. 이는 관계형성은 테이블을 부모-자식으로 연관시켜 기본 키와 외래 키로 테이블을 연결시키는 것입니다. 이 연결된 테이블에 데이터가 갱신될 때는 무결성 조건이 만족되어야 갱신 연산이 수행되게 됩니다. 제한과 널값은 기본적인 제약조건이기 때문에 다른 설명이 필요 없습니다.

 하지만 테이블 간 데이터 갱신이 연쇄(Cascade)는 대표적인 관계 연산으로 다음과 같은 제약을 부여할 수 있습니다.

  • Update Cascade: 부모 테이블의 데이터를 수정할 때 이를 참조하는 자식 테이블의 데이터도 함께 수정
  • Delete Cascade: 부모 테이블의 데이터를 삭젤할 때 이를 참조하는 자식 테이블의 데이터도 함께 삭제

제한과 널값과 같은 무결성 제약에 걸릴 경우 DBMS는 연산을 거부하며, 연쇄의 경우에는 참조되는 릴레이션의 튜플을 삭제하고 참조하는 릴레이션에서도 튜플들도 함께 삭제합니다. 이는 삭제만 할 수 있는 것이 아니라 Null 값으로 대체할 수도 있습니다. 이는 DBMS가 수정할 때 수정하는 애트리뷰트가 기본 키인지 외래 키인지 먼저 검사를 수행하기 때문에 가능한 것입니다. 만약, 수정하려는 애트리뷰트가 기본키도 아니고 외래키도 아니면 수정 연산이 참조 무결성 제약조건을 위해하지 않습니다.

기본키나 외래키를 수정하는 것은 하나의 튜플을 삭제하고 새로운 트플을 그 자리에 삽입하는 것과 유사하므로, 삽입과 삭제에서 설명한 제한, 연쇄, 널값 규칙이 수정 연산에 적용됩니다.

I. 데이터베이스 정합성을 유지하기 위한 데이터 무결성 개요

가. 데이터 무결성 (Data Integrity)의 정의

1) 허가를 받은 사용자가 수행하는 모든 작업에 있어 Database에 저장된 데이터의 일관성(Consistency)

 정확성(Correctness)을 유지하기 위한 Database의 제약조건

2) 데이터베이스의 정확성(Correctness) 또는 정밀성(Accuracy)을 유지하기 위한 데이터베이스개념

나. 데이터 무결성 제약(Constraint)의 개념

1) 데이터의 ACID를 보장하기 위하여 데이터베이스 상태가 항상 만족시켜야할 규범

2) 무효갱신으로부터 데이터를 안전하게 보호하기 위한 데이터베이스의 설계 규칙

다. 데이터 무결성 제약조건의 장점

1) 테이블 생성시 무결성 제약조건을 정의 가능

2) 테이블에 대해 정의, 데이터 딕셔너리에 저장되므로 응용 프로그램에서 입력된 모든 데이터에 대해 동일하게 적용

3) 제약조건을 활성화, 비활성화 할 수 있는 융통성(트랜잭션의 특징)

특 징

설명

Atomicity

(원자성)

- 트랜잭션은 분해가 불가능한 최소의 단위로서 연산 전체가 처리되거나 전체가 처리되지 않아야 함(All or Nothing)

- Commit, Rollback 연산, 트랜잭션관리 컴포넌트 담당

Consistency

(일관성)

- 트랜잭션이 실행을 성공적으로 완료하면 언제나 모순 없이 일관성 있는 데이터베이스 상태를 보존함

- DBMS의 무결성 제약조건 처리가 담당

Isolation

(고립성)

- 트랜잭션이 실행 중에 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근할 수 없음

- 동시성제어 컴포넌트 담당

Durability

(영속성)

- 성공이 완료된 트랜잭션의 결과는 영구()적으로

데이터베이스에 저장됨

- 회복관리 컴포넌트 담당

II. 데이터 무결성의 종류 및 확보방안

가. 데이터 무결성의 종류(개참속키사도)

무결성

개념

제약조건 예

기능

개체 무결성

(Entity Integrity)

- 기본키는 반드시 값을 가짐

- 기본키는 유일성을 보장하는 최소한의 집합

Primary Key,

NOT NULL

NULL 허용 안함

참조 무결성

(Referential Integrity)

- 외래키 속성은 참조할 수 없는 값을 지닐 수 없음

- 외래키 값은 그 외래키가 기본키로 사용된 릴레이션의 기본키 값이거나 NULL 값일 것

Foreign Key

부모와 자식 사이 입력, 수정, 삭제 제약

속성 무결성

(Attribute Integrity)

- 컬럼은 지정된 데이터 형식을 반드시 만족하는 값만 포함

Character,

Date, LONG

VARCHAR2,

NUMBER

정의된 값만 입력

키 무결성

(Key Integrity)

- 한 릴레이션에 같은 키 값을 가진 튜플들은 허용 안 됨

Primary Key + Unique Index

중복배제

사용자 정의

무결성

- 모든 데이터는 업무 규칙 (Business  Rule)을 준수해야 함

Trigger,

User Define Data Type,

Check,

DEFAULT Value

업무적 의미 값만 허용

도메인 무결성

(Domain Integrity)

- 특정 속성 값이 미리 정의된 도메인 범위에 속해야 함

CHECK, Default

허용된 범위 값 입력

나. 데이터 무결성 확보방안

DBMS 요소

내용

Primary Key

- 지정된 컬럼들이 유일성 위배없음 보장

- Primary Key not NULL (Null값 허용안함)

Unique

- 다중 보조키 개념 지원

- Primary Key와 마찬가지로 지정된 컬럼들의 유일성이 위배되지 않음 보장

- Unique NULL 허용

Foreign Key

- 테이블 간의 논리적 관계 유지보장

- Foreign Key값은 반드시 참조하는 테이블의 Primary Key

- Foreign Key 값은 NULL 값 허용

- Cascaded Option : Master 삭제시 레코드 함께 삭제

- Nullified Option : Master 삭제시 해당 값 NULL로 세팅

- Restricted Option : Foreign Key 존재시 Master 레코드 삭제 불가

Data Type

- 데이터의 형을 제한함으로써 데이터 무결성 유지

Check

- 데이터를 추가할 때마다 SQL 서버가 해당 값이 해당 컬럼들에

지정된 Check 제약 위배 여부 검사

Default

- 특정 컬럼에 대해 명시적으로 값을 입력하지 않은 경우에 SQL

서버가 자동적으로 지정된 값을 삽입

- INSERT 또는 UPDATE에서 DEFAULT 키워드를 사용할 수 있음

Trigger

- 테이블의 내용을 변경하려는 특정 사건(DB 연산)에 대해서

DBMS가 미리 정의된 일련의 행동(DB 연산)들을 수행하는 메커니즘

- DBMS 서버에 의해 자동적으로 호출

- 데이터에 대한 변경을 시도할 때마다 자동적으로

호출(데이터의 변경 전 상태와 변경 후의 상태를 사용)

- 트랜잭션의 철회(rollback)와 같은 동작을 수행할 수 있음

- 저장 프로시저의 특별한 형태로서 SQL의 모든 기능을 이용할 수 있음

- 참조 무결성을 위해 사용될 수도 있음. 참조 무결성이 위배되는 경우에 원하는 동작을 하도록 트리거를 구성

다. 참조무결성의 예시

1) 참조 무결성 예시

  - 고객 테이블과 주문 테이블의 관계에서 주문 테이블의 새로운 데이터를 입력하기 위해서는

   반드시 고객 테이블에 사전에 정보가 들어가 있어야 함

   - 참고로, 참조 무결성이 DBMS에 걸려있는 테이블에서는 인덱스가 생성되어 있지 않으면

   성능 상의 문제가 나타날 수 있음

2) 무결성 예시 테이블

Dbms 데이터 무결성 유지 방법

III. 데이터 무결성 유지를 위한 동시성 제어 유형 및 비교 방법

가. 동시성 제어 기법 유형 è무결성유지

나. 동시성 제어 기법 유형 비교

구분

2PL

타임스탬프

낙관적 검증

다중제어

특징

- 확장,수축

단계 구분

- 오류가능성

사전 방지

- 구현 용이

- 교착상태

방지

- 대기시간

없음

- 직렬성 보장

- 조회위주

DB에 효과적

- 오류가 없는 환경에 적합

- 트랜잭션

종료 시

일괄 처리

- 여러 개의  버전을 유지

- 다른 트랜잭션에서는 이전버전의 읽기를 보장

문제점

- 교착상태

발생 가능

- 대기시간이

길어짐

- 연쇄복귀

가능성

- 복귀 시 자원 낭비 (Rollback)

- 많은 저장공간 필요

- hot-backup 시스템 지원

사용

시점

웹페이지 등의 조회중심의 업무처리

- 업무구분이 명확하여 중복이 없을 시

V. 데이터 무결성 유지를 위한 회복 기법 유형 및 유형비교 방법

가. 데이터베이스 회복 기법 종류

구분

설명

로그기반 회복 기법

- 로그 파일을 이용한 복구

- Redo, Undo를 결정하기 위해서 로그 전체를   조사해야 되기 때문에 시간이 너무 많이 걸림

(로그기반)

즉시갱신

기법

- 로그파일을 이용한 복구

- REDO,UNDO를 결정하기 위해서 로그 전체를 조사해야 되기 때문에 시간이 너무 많이 걸림

- REDO를 할 필요가 없는 트랜잭션을 또다시 REDO해야 하는 문제 발생

(로그기반)

지연갱신

기법

- 트랜잭션 단위가 종료될 때까지 DB Write 연산을 지연시키고 동시에 DB 변경 내역을 Log 에 보관한 후 트랜잭션이 완료되면 Log 를 이용하여 데이터베이스에 Write 연산을 수행
-
트랜잭션이 종료된 상태이면 회복 시 Undo 없이 Redo 만 실행
-
트랜잭션이 종료가 안된 상태였으면 Log 정보는 무시함

Check Point 기법

- 효율적인 로그 이용을 위한 Chech Point

- 로그파일과 검사점(Check Point)을 이용한 복구

- 로그기반보다 상대적 으로 회복 속도가 빠름

그림자 페이지기법

- 그림자 페이지(Shadow Paging) 테이블 이용한  복구

- Undo가 간단하고 Redo가 불필요 하므로 수행 속도가 빠르고 간편.

나. 데이터베이스 회복 기법간 비교

구분

로그기반 기법

CheckPoint회복기법

그림자 페이징 기법

복구과정

UNDO,REDO 사용

UNDO 사용

그림자 테이블 교체

복구속도

느림

로그보다 빠름

빠름

디스크

사용

적은 사용량

적음

많음

복구

데이터

하나의 파일을  

로그로 사용

하나의 로그 파일

분산된 그림자 테이블

확장성

확장이 용이

용이

알고리즘 복잡

VI. 데이터 무결성을 위한 데이터 정규화

정규화

정규화 내용

1차 정규화

복수의 속성값을 갖는 속성을 분리

2차 정규화

주식별자에 종속적인지 않은 속성의 분리

부분종속 속성(PARTIAL DEPENDENCY ATTRIBUTE)  분리

3차 정규화

속성에 종속적인 속성의 분리

이전종속 속성(TRANSITIVE DEPENDENCY) 의 분리

보이스-코드 정규화

다수의 주식별자 분리(후보키가 여러 개)

4 정규화

다가 종속(Multi-Valued Dependency) 속성분리

5 정규화

결합종속(Join Dependency)일 경우는 세 개 이상의 N개로 분리

VII. 데이터 무결성의 확보 목적 (기대효과)

가. Data의 정확성 확보로 신뢰할 수 있는 정보 제공

나. Data의 일관성 유지로 자료의 효율적인 관리

다. 데이터 무결성 규칙 강제 시행은 장점과 함께 약간의 성능저하를 동반함.