2010년 2월 19일 금요일

각종 코드 MASTER 엔터티의 효과적인 DB Design

PURPOSE
데이터 모델링 과정에서 자주 나타나는 여러 각종 코드성 키 엔터티(Key Entitys)에 대한 실전적인 물리적 DB Design 해법.

SCOPE & APPLICATION

효과적인 물리적 DB Design 방안

KEY IDEA

(KEY WORD : KEY ENTITY, SUPER TYPE, CODE, CODE MASTER, 주코드, 부코드, 코드, 코드테이블 )

SUPPOSITION


DESCRIPTION

데이터 모델링 단계에서 가장 많이 나타나는 엔터티 중의 대표적인 키엔터티(Key Entity)들이 우리가 흔히 예기하는 코드마스터 성격이다. 예로, 학력, 직급/직책, 성별, 연령대, 상품구분, 업무구분 등 수 없이 많은 종류의 코드성 엔터티를 우리는 흔히 접할 수 있다.
여기서 많은 설계자들이 고민하는 부분 중에 하나는 이러한 코드와 명칭과 같은 단순 속성만을 필요로 하는 여러 가지 엔터티에 대하여 물리적인 DB Design기법을 어떻게 해야 하는지에 대한 고민을 하는 경우가 다반사이다. 여러 고객사의 물리적 DB Design시에서 나타나는 공통적인 대표적인 질문 유형이며 이에 대한 명확한 판단기준이 있는데도 불구하고 아직도 미궁에서 난상토론을 하는 경우가 많다.
여기서 선택하는 두 가지의 기법 중 하나는 각각의 엔터티를 독립적인 테이블로 설계하는 방법을 택할 것인지 아니면, 또 하나의 다른 방법으로 비슷한 모양이므로 하나의 SUPER TYPE으로 통분하여 여러 가지의 SUB TYPE으로 표현하고 최종으로 하나의 테이블로서 표현하게 하는 방법이다.
학력과 직급 엔터티를 그림으로 표현하면 다음과 같은 두 가지의 경우로 대별할 수 있다.




데이터모델링 과정에서는 속성과 엔터티의 명확화를 위하여 (그림1)과같이 독립적인 엔터티로 표현하여 모델링을 수행하는 것이 모범 안이다.
그러나, 물리적인 DB Design시에는 (그림2)와 같은 통합 테이블구조로 설계하는 것이 모범 안이다. 이유는 물리적인 DBMS특성과 I/O엑세스 효율을 고려하여야 하기 때문이다.
본 사안의 정보에 대한 몇 가지 특징을 먼저 열거해 보자.
√이러한 각종 코드성 테이블의 자료들은 극소수의 Instance(Row)를 가지고 있다.

√대부분의 정보들은 해당 식별코드와 명칭,내용 정도의 단순한 정보를 표현하며 별도의 이력 관리나 정보의 변화가 거의 없는 코드성 정보이며

√이러한 형태의 정보들은 시스템별로 상당히 여러 가지로 존재하게 된다.

√심지어는 시스템 구축 이후에도 추가적인 시스템 규칙성 Business Rule을 뒷바침하게 되는 각종 코드(예 : 업무처리구분, 주문처리상태 등)가 지속적으로 발생될 수 있다.

이제 RDBMS의 몇 가지 주요한 특징을 나열해보자.
√DBMS의 I/O단위는 DB Block이며 DBMS는 물리적인 I/O 엑세스 효율을 높이기 위하여 연속적인 물리적인 저장공간(DB Block)을 할당받아 Extent로 사용하게 된다.

√인덱스 또는 테이블과 같은 하나의 물리적인 DB Object는 최소 하나의 EXTENT가 할당되어야 한다.

√하나의 물리적인 DB EXTENT는 2개 이상의 DB Block이 할당되어야 한다. 일반적으로 하나의 DB Block은 OS Block Size로 지정되어 사용하는 것이 보편적이라고 예상한다면 하나의 DB Extent에는 최소 4K정도의 공간을 할당받게 되며, 이는 인덱스에서도 동일하게 적용된다.

√이러한 가정을 하게 된다면 하나의 테이블이 최소 하나의 Primary Key Index를 가지고 있는다고 하여도 최소 8K라는 공간을 차지하게 될 것이다.

이러한 상기 특징을 고려하여 다음과 같은 가정을 통하여 통합 설계의 당위성을 설명한다.
√학력 정보에는 무학, 초등학교졸,…,박사 까지 대략 7,8종류의 학력정보가 필요하다고 가정하고 관리하고자 하는 정보의 Size는 코드 2자리(Bytes) + 명칭 10자리(Bytes) 총 12 Bytes를 필요로 하며 학력정보 모두를 관리하기 위하여 약 12*8 = 96 Bytes 가 필요하게 된다.

√그럼, 이렇게 96 Bytes 정도의 데이터 관리를 위하여 별도의 독립적인 테이블로 설계한다면 테이블 공간 최소 확보 사이즈인 4K를 사용하게 되며 실제 98%에 해당하는 3.91 Kbytes 를 빈 공간으로 낭비하게 될 것이다. 여기에 인덱스 Object에 대한 고려까지 한다면 너무도 억울한 경우라 할 수 있다.

√DBMS 활용시 성능상 직결되는 문제는 바로 I/O 성능이다. CPU의 성능이나 Memory의 성능보다 현실적으로 가장 성능에 영향을 미치는 부분은 바로 물리적인 Block I/O의 효율이다.

√원하는 정보 추출을 위하여 얼마나 많은 물리적인 Block을 I/O하였느냐가 바로 성능에 미치는 직접적인 요소인 것이다.

√만일 학력,직급 등 5,6가지의 여러가지 코드성 테이블을 하나의 물리적인 테이블로 통합할 경우에는 아마 모든 코드정보들을 단 하나의 DB Extent에 모두 저장할 수 있을 것이며, 역으로 추론한다면 단 1,2개의 DB Block 한번으로 5,6가지의 여러 코드성 테이블의 정보는 이미 Memory에 상주하는 DB Buffer Cache에 올라와 있어 대부분 Memory I/O로 모든 요구를 충족할 수 있을것이다. 이러한 원리로 Index Object에 대한 물리적인 I/O 효율까지 고려한다면 이는 엄청난 효율의 차이를 얻을 수 있다.

그렇다면 이러한 통합 코드 테이블 DB Design 활용 방안에 대하여 요약해 보자.
√앞서 표현한 (그림2)의 통합 코드 정보에 대한 SUPER TYPE 엔터티라고 생각한다면 물리적인 DB Design시에는 SUBTYPE 구분이 UID(Unique Identifier : Primary Key)자격으로 등장한다.

√고로, 통합 코드 정보의 UID(PK)는 코드분류+상세코드로 설정되어지게 되며, 예로 통합코드 테이블에서 관리되고 있는 전체 코드 종류 정보를 파악하기 위한 코드분류를 ‘00’으로 설정하여 지정하고 상세코드에 각각의 코드종류를 표현하는 값을 부여하여 코드정보를 가변적으로 추가가 자연스럽게 가능하도록 적용할 수 있다.

√각각의 코드들은 해당 코드분류에 지정한 값을 지정하고 각 코드정보로 관리하고자 하는 정보들을 상세코드와 명칭으로 표현하여 하나의 테이블에 여러가지의 코드정보를 관리하도록 한다.

√아래 몇 가지의 실 사례 Instance를 참고로 나열한다.




이제 이러한 물리적인 DB Table Design 환경에서 실제 활용 SQL을 생각해 보자.
고객의 정보를 추출하면서 학력정보를 추출하기 위한 SQL Sample은 다음과 같은 형태로 활용될 것이다.
SELECT A.cust_id, A.cust_name, A.jumin_no, B.code_name
FROM customer A, code_master B
WHERE A.last_educ = B.code
AND B.code_type = ‘01’ /* 학력코드구분조건 */
AND A.cust_name like ‘조광%’;

이러한 SQL 활용 방안은 결코 바람직하지 않은 방법이며, 코드 종류별로 모두 지정 상수 조건을 사용한다는 것은 응용프로그램의 유연성에도 문제가 있게 마련이다. 이렇게 프로그램 코딩시에 한줄의 코딩의 수고를 모두 한다는 것은 더더욱 못할 일이다.
이럴때 바로 VIEW를 활용하게 되면 내우 유용하게 활용할 수 있으며 옵티마이져가 판단하기에는 동일한 효과를 얻을 수 있으면서 관리측면에서도 효율적으로 융통성 있게 활용할 수 있다. 다음의 VIEW생성을 통하여 SQL활용시에는 내부적으로 상기 SQL과 동일한 효과를 얻을 수 있다.
- VIEW생성 SCRIPT

CREATE OR REPLACE VIEW CODE_EDUC
AS
SELECT * FROM CODE_MASTER WHERE CODE_TYPE = ‘01’;

- VIEW를 활용한 SQL

SELECT A.cust_id, A.cust_name, A.jumin_no, B.code_name
FROM customer A, code_educ B
WHERE A.last_educ = B.code
AND A.cust_name like ‘조광%’;

상기 SQL은 앞서 기술한 SQL과 내부적인 처리는 동일한 SQL 역할을 하게 되며 마치 별도의 독립적인 테이블 구조를 갖는 것과 동일한 SQL활용이 가능하게 된다.
이러한 통합 테이블 구조로 설계할 경우에는 특히, 업무상 지속적으로 추가 발생이 빈번한 여러가지 단순 코드성 정보 추가가 통합코드 테이블의 단순한 Value의 추가 및 VIEW의 정의로 해결이 가능하므로 상당한 장점을 얻을 수 있을 것이다.
그러나, 이러한 통합 코드 설계를 한답시고 각종 모든 테이블을 통합해서는 곤란하다. 즉, 정보의 용도나 관리목적으로 이력이 필요하거나 여타 별도의 목적에 의하여 각종 추가 속성이 필요한 경우나 해당 코드 관리 정보의 양이 상당부분의 자료량으로 관리되어야 하는 경우는 별도의 테이블로 정석 설계를 하여야 한다.


출처 : http://www.en-core.com

ARC Model의 DB 디자인

PURPOSE

데이터 모델링 결과 상호 배타적 독점관계(ARC-Relationship) 모델에 대한 기본 DB Design기법.

SCOPE & APPLICATION

ARC Model DB Design 방안

KEY IDEA

(KEY WORD : ARC, 배타적독점관계, 아크관계, ARC Relationship, ARC관계)

SUPPOSITION

DESCRIPTION

데이터 모델링 결과 흔하게 나타나는 관계 중의 하나는 상호 배타적 독점관계 (ARC Relation)이다. ARC Relation은 부모가 하나의 엔터티가 아니라 두개 이상의 엔터티 중에서 상황(Instance)에 따라 어느 한 엔터티가 부모 또는 주어가 되는 엔터티가 될 경우에 이를 ARC Relation이라고 한다.
다음의 대표적인 사례 ERD를 살펴 보자.



(그림1)에서 하나의 주문원장의 주문 주체는 개인 고객일 수 도 있으며 법인 고객일 수 도 있다.
그러므로 상기 ARC관계 엔터티(주문원장)의 모든 Instance(개체)는 반드시 개인 또는 법인 둘 중하나의 부모를 갖게 된다.
이러한 상황의 모델링을 DB Design화 시킬 경우에는 ARC-Relation을 명확히 지정할 수 있는 속성을 하위 엔터티에 포함을 하는 방법을 많이 활용하게 된다.
ARC관계 구분을 위해 마치 하위 엔터티를 몇 개의 서브타입(SUBTYPE)으로 설계하는 것과 유사하게 표현한다는 원리이다.
즉, 역으로 표현하여 (그림1)의 주문원장에는 개인고객주문원장 과 법인고객주문원장의 두개의 서브타입(SUBTYPE)이 존재한다고 할 때, 이 두 가지의 서브타입을 하나의 슈퍼타입 (SUPERTYPE)으로 표현한 것이 바로 주문원장이라고 할 수 있다. 이러한 경우 서브타입(SUBTYPE) 모델에 대한 DB Design 시 적용하는 방안은 서브타입 구분 속성을 추가하는 방법이며 이러한 서브타입 구분 속성을 (그림1)에서는 “개인법인고객구분” 이라는 속성을 주문원장 DB Design시에 추가한다는 의미이다.
이러한 DB Design기법은 하위 테이블에서 선 처리(Driving Table)될 경우에 자기 자신의 ARC관계 구분 정보로 판단하여 필요한 하나의 부모 테이블과 연결을 할 수 있기 때문에 데이터연결(JOIN)의 비효율을 예방할 수 있으며, 전사 통합 데이터베이스 구축을 위해서라도 올바른 DB Design 해법이라고 할 수 있다.
물론 이러한 DB Design시의 관계 명확화를 위한 속성의 추가로 인하여 추가 부담이 되는 1 Byte의 부담은 100만건일 경우 1 MB 가량의 저장공간의 증가가 따르게 된다. 하지만 이 정도의 투자는 실보다 득이 많다. 조인 엑세스 연결시 항시 2배의 부담을 가중시키는 것 보다는 이롭기 때문이다.
이렇게 ARC관계에서 하위 엔터티에 ARC관계 구분속성을 추가하지 않고 DB Design을 하는 경우도 있다. 이는 하위 테이블이 업무적으로 주 선 처리(Driving Table) 대상이 되지 않고 반드시 상위 부모 테이블로부터 선 처리(Driving)되는 경우만 존재한다면 ARC관계 구분속성을 하위 테이블에서 추가할 필요가 없게 된다. 그러나, 다양한 업무의 특성상 대부분의 경우 그렇지 않은 경우가 다반사이므로 이러한 DB Design이 많이 활용되지 않는다.
이러한 배경에 따른 DB Design 결과 DDL Script를 제시하면 다음과 같다.

CREATE TABLE ORDER_MASTER
(ORDER_NO number(8) not null, /* Primary Key */
cust_id varchar2(14) not null, /* 개인고객번호 또는 법인번호 */
cust_flag char(1) not null, /* ARC관계구분자 1:개인고객 , 2:법인고객 */
order_date char(8) not null,
. . . . . .

SUPERTYPE - SUBTYPE Model의 DB Design

PURPOSE

데이터 모델링 결과 슈퍼타입(SUPERTYPE) 서브타입(SUBTYPE) 모델에 대한 기본 DB Design기법.

SCOPE & APPLICATION

SUPER/SUB TYPE DB Design 방안

KEY IDEA

(KEY WORD : 슈퍼타입, 서브타입, SUPER TYPE, SUB TYPE)

SUPPOSITION

DESCRIPTION


슈퍼타입과 서브타입의 정의
데이터 모델링에서 보다 응축화되고 통합된 데이터 모델링 기법을 많이 활용하게 되면 여러가지 형태의 슈퍼타입내의 서브타입이 나타나게 된다.
이러한 슈퍼/서브 타입 모델링에 대한 최종 물리 데이터 모델링 및 DB Design 방법은 여러가지 해법을 적용할 수 있으며, 이러한 해법은 단순한 공식과 같은 해법이 아니라 주어진 환경 및 모델에 표현된 상황 그리고 성능을 고려한 섬세한 설계자의 테크닉이 필요하기 때문에 많은 설계자들이 슈퍼/서브 타입 모델에 대한 최종 DB Design방안에 대한 고민에 빠지게 된다.
다음의 대표적인 슈퍼/서브 타입 사례 ERD를 살펴 보자.




(그림1)에서 고객이라는 슈터 타입(Super Type) 엔터티는 개인과 법인이라는 두개의 서브타입으로 구성되어 있으며, 재무결산이라는 엔터티는 개인고객과는 상관없이 고객 중에서 법인일 경우에만 존재할 수 있는 직접 종속 하위 엔터티이다.
과금구성이라는 엔터티는 개인/법인 모두 갖을 수 있는 정보로서 고객이라는 슈퍼타입 엔터티와 납입자라는 관계를 가지고 있다. 즉, 과금구성의 주체인 납입자는 개인납입자일 수도 있으며 법인납입자일 수도 있다는 의미이다.
과금구성이라는 엔터티에는 대금 납부방법에 따라 자동이체, 신용카드, 지로 와 같이 세가지의 서브타입이 있으며, 지로일 경우에는 슈퍼타입의 공통 속성외에 별도의 관리 속성이 필요 없지만 자동이체일 경우와 신용카드일 경우에는 별도의 필요 관리 속성이 정의되어 있다.
슈퍼타입은 각 서브타입의 전체 합집합이어야 하며 각각의 서브타입간의 교집합은 없어야 한다. 즉, 다음과 같은 집합정의가 만족되어야 한다.
슈퍼타입(고객) = 서브타입1(개인) ∪ 서브타입2(법인)

서브타입1(개인) ∩ 서브타입2(법인) = Ø

이는 고객이라는 집합은 개인과 법인의 합집합이라는 의미이며 하나의 주문원장의 주문 주체는 개인 고객일 수 도 있으며 법인 고객일 수 도 있다는 정의이다. 그리고 슈퍼타입에 속하는 서브타입 역시 자신 집합내에서 다시 여러 개의 서브타입을 가질 수 있다. 즉, 하나의 슈퍼타입 A 에 속하는 임의의 서브타입AA은 자신의 집합 내에서 또다시 여러 서브타입(AAA,AAB)을 가질 경우 상위 서브타입(AA)은 스스로 슈퍼타입의 역할을 하게 된다.
데이터 모델링에서 슈퍼/서브타입 엔터티 정의를 할 때에 주의를 기울여야 할 사안이 바로 어느 서브타입 집합에도 속할 수 없이 별도의 집합이 나타날 가능성이 있어서는 안된다는 점이다. 만일 자신이 없다면 구체적으로 정의할 수 없지만 예상되는 별도의 부분집합을 “기타”라는 서브타입을 활용하여 정의하고 지속적인 모델링 과정에서 검증토록 하는 방법도 자주 사용되는 기법이다.  
슈퍼타입과 서브타입의 DB Design기법
슈퍼타입과 서브타입 엔터티에 대한 물리적 데이터모델링 및 DB Design기법에는 대표적으로 다음과 같은 세가지의 활용 해법이 있다.
하나의 테이블로 통합하여 설계하는 방안
여러 개의 테이블로 분할하여 설계하는 방안
슈퍼타입 테이블과 서브타입별 테이블로 각각 정의하여 ARC관계로 설계하는 방안
먼저, 하나의 테이블로 통합하는 방안에 대하여 살펴보자.
이 방안은 슈파타입내에 존재하는 여러 가지의 서브타입을 구분할 수 있는 속성(컬럼)의 추가로 해당 개체(Instance)가 어느 서브타입의 개체인지를 식별하게 하여 단일 테이블로 구성하는 방안이다.
이 경우 해당 테이블에 포함되는 컬럼(속성)은 슈퍼타입과 서브타입에 존재하는 각각의 속성들에 대한 최대공약수 속성을 갖게 하여 통분될 수 있는 각 서브타입의 속성들은 하나의 공용의미의 컬럼(속성)으로 사용하고 해당 의미를 앞서 설명한 서브타입 구분 컬럼(속성)으로 명확히 구분하게 한다.
그러므로 최대공약수 도출을 잘 하지 못하게 되면 한 테이블에 무척 많은 컬럼들이 각각의 독립적인 의미로 나열되게 된다. 그렇다고 통분을 무리하게 하여 하나의 컬럼으로 만국 공통 다용도 컬럼으로 설계할 경우에는 속성의 무결성 보장에 상당한 무리가 따르게 되므로 다양한 경험을 통하여 최적의 통분과 속성 무결성 보장을 적절하게 이루게 해주는 선에서 설계의 정점을 찍어야 할 것이다.
상기 (그림1)에서 좋은 예를 찾아볼 수 있으니 과금구성 엔터티를 활용하여 DB Design 해법을 제시해보자.



상기 Table Instance Chart양식에서 표현된 DB Design기법에는 통분이 필요한 2가지의 유사형태의 독립적인 서브타입의 속성을 약분하여 설계하였으며 (이체은행,신용카드사→ 금융기관 으로 계좌번호,신용카드번호→ 계좌카드번호로 통분시킴) 예금주와 유효만료일 컬럼은 별도의 독립적인 컬럼으로 설계하였다.
이러한 설계 방안은 주로 서브타입 간 속성 통분이 가능하면서 서브타입간 자료의 분포 차이가 대등한 경우 그리고 일부 서브타입간 독립적인 속성 차이가 많지 않은 경우에 주로 적용하는 방안이며 만일 테이블 분리를 할 경우 주변 엔터티와 잦은 ARC Relation 발생이 예상되는 경우에 이를 예방하기 위하여 키(Key)엔터티를 응축하여 통합하고자 할 경우에 적합하다.
이 방안은 주로 모든 데이터 발생의 시조가 되는 키(Key)엔터티에서 효과적이며 단점으로는 하나의 테이블의 자료량이 대량화가 발생될 가능성이 있어 정확한 엑세스 유형을 파악하여 최적의 인덱스 또는 클러스터링 및 테이블 파티션(Partition) 전략이 같이 고려되어야 한다는 점이다.
또한 주요한 단점은 컬럼의 무결성 보장(예:Not Null)이 어렵다는 것이다. 또한 로직에서 서브타입 구분자에 대한 조건이 자주 나타나고 테이블 뿐만이 아니라 인덱스 구성 컬럼도 증가되는 단점이 있다.
다음으로, 여러 개의 테이블로 분할하여 설계하는 방안에 대하여 살펴보자.
이 방안은 슈퍼타입에 정의된 공통 속성과 각 서브타입의 속성을 더하여 서브타입별로 테이블을 설계하는 방안으로서 반드시 필요한 자기만의 고유 컬럼만으로 설계하므로 속성의 무결성 보장에 있어서는 가장 확실한 방안이다.
이는 서브타입별 Relation 정의가 테이블 참조제약성을 명확히 부여하고 쉽게 일치성을 보장받을 수 있으며 각 컬럼의 무결성을 완벽하게 보장할 수 있는 것이 장점이다.
앞에서 열거한 첫번째 방안에서 사례로 든 과금정보라는 테이블을 다음과 같이 3개의 테이블로 설계하는 방안이다.
자동이체과금구성

납입자번호, 과금구성SEQ , 유효시작일,유효종료일,이체은행,계좌번호,예금주 …

신용카드과금구성

납입자번호, 과금구성SEQ , 유효시작일,유효종료일,신용카드사,카드번호,유효만료일 …

지로과금구성

납입자번호, 과금구성SEQ , 유효시작일,유효종료일 …

첫번째 방안에 비하여 서브타입별로 관리되는 속성(형태와 개수)의 차이가 심하거나 업무적으로 별도의 독립적인 업무활용(데이터 연결) 패턴을 보이는 환경 그리고 서브타입간의 자료량 분포의 차이가 심한 경우(예: 고객정보 중 개인 95% , 법인 5%) 에서 주로 채택되는 방안이 바로 이 방안이다.
이러한 방안은 잘못 적용할 경우에는 빈번한 ARC Relation 연결을 위하여 비효율적인 조인이 자주 나타날 수 있으며 빈번한 UNION 처리가 발생하게 되므로 개발시 기술상 다소 어려움과 성능상 위험을 초래할 수 있다. 또한 테이블 오브젝트의 증가로 인하여 다소 관리의 어려움과 서브타입간 교집합 예방을 위한 자료 일관성에 어려움이 있다.
개발 성능 측면에서는 고급 SUPER SQL로서 성능개선을 하고자 할 경우 한 SQL로 통합이 어려워 지는 경우와 합집합의 개념의 처리를 하고자 할 경우 부분범위 처리가 곤란해지는 경우도 발생하는 단점이 있다.
끝으로, 슈퍼타입 테이블과 서브타입별 테이블로 각각 정의하여 ARC관계로 설계하는 방안에 대하여 살펴보자.
전체 집합(슈퍼타입) 처리가 빈번하면서 업무적으로는 서브타입별로 독립적으로 활용되어지는 업무상 자료의 독립성이 강한 상황이면서 업무적으로 대부분의 처리가 공통부분(슈퍼타입 공통속성)에서 주로 발생하는 경우에 선택할 수 있는 설계 기법이다.
하나의 테이블로 통합할 경우 최대공약수 컬럼으로 나열하다 보니 너무도 많은 컬럼 정의가 필요하게 되는 상황에서도 선택할 수 있는 방안 중의 하나이다.
앞에서 사례로 사용한 예제 (그림1)에서 고객이라는 슈퍼타입 엔터티를 가지고 다음과 같은 DB Design을 할 수 있을 것이다.
고객

고객번호, 한글명칭, 등록일자, 연락처, …

개인고객정보

고객번호, 성별, 주민번호, …

지로과금구성

고객번호, 자본금, 법인번호 …

이러한 설계기법은 궁극적으로는 마치 배타적독점관계(ARC Relation)로 해석하기가 오히려 편할 것이다. 즉, 이 상황에 대한 고객 Entity를 ARC관계로 표현한 ERD로 다음 (그림2)와 같이 표현할 수 있다.



이러한 설계기법은 하나의 테이블로 통합할 경우 대용량의 데이터량 부담과 I/O엑세스 효율을 위한 물리적인 블록당 정보의 량을 증가시켜서 물리적인 디스크 I/O를 감소하기 위한 방안으로 많이 활용된다. 즉, 주로 대부분의 업무가 고객의 이름과 연락처만을 원하는 경우에는 고객이라는 슈퍼타입 테이블의 가로길이(속성의개수)를 줄여서 가능한 많은 고객의 자주 참조되는 핵심 주요 정보를 적은 DB Block에 저장하여 I/O효율을 극대화할 수 있다. 이러한 경우에는 특히 업무의 특성을 고려한 속성 배치에 심도있는 고려가 필요하다.
ARC관계에 대한 물리적인 설계 기법은 “ARC Model의 DB Design” 자료를 참고하기 바란다



출처 :http://www.en-core.com/

팔로어