데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

도메인(속성) 무결성 규칙.

데이터 이야기
작성자
dataonair
작성일
2015-01-20 00:00
조회
9152


도메인(속성) 무결성 규칙.



무결성이란 데이터를 테이블에 입력, 수정, 삭제, 조회 할 때 데이터 값에 대하여 일관성과 정확성을 준수하는 업무 규칙이라고 한 것을 명확히 기억하도록 하면서 도메인에 대한 정의를 다시 한번 상기하여 보면, 동일한 특성을 갖는 모든 원자 값들의 집합을 그 속성의 도메인(Domain)이라 한다. 각 속성은 어느 한 도메인 상에서 정의 되어야 하고, 정의된 속성은 반드시 그 해당 도메인으로부터만 값을 취할 수 있는 것이다.

도메인을 단순히 데이터 타입(Type)과 길이(Length) 만을 생각하는 사람이 있는데, 도메인(속성) 무결성 규칙은 아래와 같이 실체유형(테이블) 내에 속성(컬럼)에 대한 무결성 규칙으로 데이터 타입과 길이뿐 만이 아니라 허용 값(Permitted Value), 기본 값(Default Value), 유일성, Null 여부 등에 대한 업무 규칙을 말한다.


dbin_384.png

<도메인 무결성 규칙>


오라클 데이터베이스의 경우 물리적(Physical)으로 PK Constraint와 FK Constraint를 제외한 속성에 설정하는 모든 Constraint를 말한다.


왜 도메인이 중요한가

“013. 관계형 데이터 구조 각 열은 동일한 종류이다”에서 설명한 것을 다시 한 번 살펴보면

가) 도메인의 어떤 특정 값이 결정 될 때 우리는 이 값을 보고 의사 결정을 한다.
나) 도메인의 중요성은 같은 도메인의 값들끼리 비교가 허용된다는 것이다.
다) 이러한 도메인은 데이터베이스 정의의 한 부분으로 분명하게 명세함으로써 속성이 취할 수 있는 값을 제한할 수 있는 것이다.

결정된 도메인에 의하여 의사 결정

언어라고 하는 것이 아직 생성되지 않은 아주 오래 전 원시 시대를 생각해 보자! 언어를 사용할 줄 모르는 어떤 원시인이 어느 날 매우 뜨거운 물에 발을 담갔을 때 이 사람은 그저 비명을 지를 것이며, 매우 더운 여름 날 시원한 물 속에 몸을 담그면 매우 기분 좋고 편안한 표정을 지을 것이며, 겨울 어느 날 물 속에 발을 담그면 매우 차가워 소스라치게 놀랄 것이다.

도메인은 속성이 취할 수 있는 값의 집합이라고 하였다. 예를 들어, 신장(身長: 키) 이라는 속성이 있다고 가정해 보자! 단위를 센티미터로 관리할 때, 이 값은 0보다 크고, 300보다는 작은 자연수 일 것이다. 이 값이 200이면 키가 크다고 생각하고, 150이면 키가 작다고 생각할 것이다. 온도라는 속성을 생각해 보자! 내일의 온도가 영하 10도이면 옷을 두껍게 입을 것이고, 20도라고하면 옷을 적당히 입을 것이다. 결재 상태 코드라는 속성의 값이 “미결” 상태로 있다면 이것을 결재 처리해야 한다고 여길 것이다. 이렇듯 우리는 도메인이 취할 수 있는 값 중 어떤 값이 결정될 때 이를 보고 의사 결정을 할 수 있는 것이다. 이러한 결정을 정확하게 하기 위해서는 결정되는 값이 정확해야 한다는 것이다.


같은 도메인의 값들끼리 비교가 허용

예를 들어, 사원 중에 홍길동이의 키가 180인데, 강감찬의 나이가 32라고 한다면 무슨 말을 하는 것인지 전혀 모를 것이다. 즉, 속성의 값을 비교하는 경우는 도메인이 같은 경우라야 의미가 있다는 것이다. 상기의 “데이터 구조/ Same Domain”에서 고객의 “고객번호(CUST_NO)” 도메인이 8자리 문자 타입으로 구성된 문자열의 집합이고, 고객취미의 “고객번호(CUST_NO)” 도메인이 8자리 숫자 타입으로 구성된 숫자열의 집합이라고 하고 조인(Join)을 한다면, 이는 홍길동이의 키가 180인데, 강감찬의 나이가 32처럼 말하는 것과 같은 얘기라고 할 수 있는 것이다. 이러한 도메인의 중요성은 같은 도메인의 값들끼리 비교가 허용된다는 것이다.

즉, 도메인이 같은 고객번호와 고객번호를 비교하는 것은 의미가 있지만, 도메인이 다른 고객번호를 비교한다면 DBMS는 일단 같은 도메인으로 만든 다음 이를 비교하게 된다. 그래서 내부적인 데이터 형 변환이 일어나 인덱스가 있더라도 인덱스를 못 타고 수행 속도가 느려지는 현상일 발생 할 수 있다. 이러한 현상 때문에 사람들은 통상 도메인이 다르게 하면 속도가 느려 지므로 도메인을 표준화하라고 하는데, 이 말도 맞지만 도메인이 달라 값이 틀려지면 의사 결정을 제대로 할 수 없는 것이 더 중요한 것이라고 생각해야 할 것이다. 날짜인 속성의 도메인을 문자로 하여 데이터 값이 “20130733”이라고 들어간다면 이 날짜를 어떻게 해야 하겠는가


속성이 취할 수 있는 값의 제한.

우리는 통상 도메인을 데이터 타입과 길이 정도만을 얘기해 왔지만, 도메인은 속성이 취할 수 있는 값의 집합이기 때문에 좀 더 엄밀히 논하면 데이터 타입, 길이뿐만 아니라 널(NULL) 여부, 허용 값(Permitted Value), 기본값(Default Value) 등이 같은 영역 안에 포함된다면, 이것 또한 도메인으로 취급한다.

예를 들어, 정수 데이터 타입의 변수 I(예들 들어, 보험 업무의 보험료라는 변수)가 있을 때 이 변수 I는 언제 어느 때고 정수 값만을 가질 수 있는 것처럼, 속성 고객 성명의 도메인이 10자리의 문자로 정의되었다면 이 고객 성명 속성의 값은 언제 어느 때라도 10자리 문자 값을 취할 수 있다. (실제 데이터베이스에서는 고정(Fixed) 길이 문자와 가변(Variable) 길이 문자를 사용한다.) 따라서 도메인은 본질적으로 개념적일 수밖에 없다. 왜냐하면 도메인의 값 전체를 데이터베이스 속에 분명하게 저장해 놓지는 못하기 때문이다.

그렇지만 이러한 도메인은 데이터베이스 정의의 한 부분으로 분명하게 명세함으로써 속성이 취할 수 있는 값을 제한할 수 있는 것이다. 즉 속성을 정의할 때 그 해당 도메인도 함께 명세함으로써 실제 속성의 값으로 나타난 값이 적당하냐 아니냐를 데이터베이스 관리 시스템이 검사할 수 있게 되는 것이다.

관계형 데이터베이스 관리 시스템에서 테이블 컬럼(Column)의 데이터 타입뿐만이 아니라 체크 조건(Check Constraint)을 설정하는 것도 속성의 도메인이 갖는 값이 적당하냐 아니냐를 관계형 데이터베이스 관리 시스템이 검사할 수 있게 하는 것이다.


“데이터 무결성은 데이터베이스 내의 데이터의 유효성, 일관성, 그리고 정확성을 가리킨다. 필자는 데이터베이스로부터 추출한 정보의 정확성 수준이 데이터베이스에 설정한 데이터 무결성의 수준에 정비례한다고 단언할 수 있다. 데이터 무결성은 데이터베이스 설계 작업에서 가장 중요한 측면 중 하나이며, 과소평가하거나 간과하거나 부분적으로 무시할 수 없다. 만약 그렇게 한다면 감지하거나 식별하기가 매우 힘든 오류에 빠질 수 있으며, 결과적으로 부정확하거나 완전히 잘못된 정보를 얻게 될 것이다.”
운명적 존재를 위한 데이터베이스 설계
(Database Design for Mere Mortals : Michael J.Hernandez)



출처 : 한국데이터베이스진흥원

제공 : DB포탈사이트 DBguide.net