[DAP 전문가 가이드] 4.4.3 논리-물리 모델 변환
논리 데이터 모델-물리 데이터 모델 변환 용어
엔티티-테이블 변환
테이블 설명
- 테이블은 데이터를 저장하기 위해서 생성된 데이터베이스에서의 가장 기본적인 객체이다.
- 테이블(Table)
- 테이블은 기본적으로 컬럼과 로우를 가진다. 각각의 컬럼은 지정된 유형의 데이터 값을 저장하는 데 사용된다.
- 로우(Rows)
- 테이블의 한 로우에 대응. 튜플, 인스턴스, 어커런스라고도 한다.
- 컬럼(Columns)
- 각 개개인의 관리 항목에 대한 Value를 저장한다.
- 기본키(Primary Keys)
- 하나의 컬럼 혹은 몇 개의 컬럼 조합으로, 어떤 경우라도 테이블 내에 동일한 값을 갖는 튜플이 존재하지 않도록 한다.
- 외래키(Foreign Keys)
- 외부 데이터 집합과의 관계를 구현한 구조이다.
서브타입 변환
- 논리 데이터 모델에서는 비즈니스 또는 업무를 데이터 모델로 표현하기 위해서는 최대한 상세한 표현이 필수적이다.
- 이러한 목적을 달성하기 위해 가능하면 집합(엔티티)의 구성은 서브타입을 사용하여 구체적으로 표현하는 것이 통상적이다.
- 또한 각각의 서브타입들이 독립적인 속성, 관계를 가지고 있는 경우에는 이러한 서브타입을 사용한 집합의 표현은 필수적이다.
서브타입 변환 방법
- 슈퍼타입 기준 테이블 변환
- 서브타입 기준 테이블 변환
- 개별타입 기준 테이블 변환
- 슈퍼타입 기준 테이블 변환
- 서브타입을 슈퍼타입에 통합하여 하나의 테이블로 만든다.
- 이 통합된 테이블에는 모든 서브타입의 데이터를 포함해야 한다.
- 주로 서브타입에 적은 양의 속성이나 관계를 가진 경우에 적용된다.
- 서브타입 기준 테이블 변환
- 슈퍼타입 속성들을 각 서브타입에 추가하여 각각의 서브타입마다 하나의 테이블로 만든다.
- 분할된 테이블에는 해당 서브타입의 데이터만 포함돼야 한다.
- 주로 서브타입에 많은 양의 속성이나 관계를 가진 경우에 적용된다.
- 개별타입 기준 테이블 변환
- 슈퍼타입과 서브타입을 각각 테이블로 변환한 경우이다.
- 슈퍼타입과 서브타입 테이블 간에는 1:1 관계가 생성된다.
속성-컬럼 변환
- 속성이나 관계를 물리 데이터 모델 객체로 변환하는 데 있어서 사례 데이터 표를 작성해 보는 것은 실제 데이터가 어떤 형태로 저장되는지, 어떠한 예외사항이 존재할 수 있는지 등을 용이하게 파악할 수 있도록 도움을 준다.
일반 속성 변환
- 엔티티에 있는 각 속성들에 대한 컬럼명을 사례 데이터 표의 컬럼명 란에 기록한다.
- 컬럼의 명칭은 속성의 명칭과 반드시 일치할 필요는 없으나 개발자와 사용자의 혼동을 피하기 위해 가급적 표준화된 약어를 사용한다.
- 표준화된 약어의 사용은 SQL 해독 시간을 감소시킨다.
- SQL의 예약어의 사용을 피한다.
- 가급적 컬럼 명칭은 짧은 것이 좋으며, 짧은 명칭은 개발자의 생산성에 긍정적인 영향을 준다.
- 필수 입력 속성은 Nulls/Unique 란에 NN을 표시한다.
- 실제 테이블에 대한 설계를 검증하기 위한 목적으로 가능하다면 표본 데이터를 입력시킨다.
Primary UID > 기본키 변환
- 논리 데이터 모델에서의 Primary UID는 물리 데이터 모델에서는 기본키로 생성된다. 실제 DDL에서는 기본키 제약 조건의 형태로 객체가 생성된다.
Primary UID(관계의 UID) > 기본키 변환
- 논리 데이터 모델에서 Primary UID에 속하는 속성 중에는 해당 엔티티 자체에서 생성된 것도 존재하지만 다른 집합으로부터의 관계에 의해 성성되는 UID 속성도 존재한다.
Secondary(Alternate) UID > Unique Key 변환
- 논리 데이터 모델에서 정의한 Secondary UID 또는 Alternate Key들은 해당 집합과 상대 집합과의 선택적인 관계를 가질 수 있도록 하는 데 중요한 역할을 수행한다.
- 물리 데이터 모델에서는 Unique Key로 생성된다.
관계 변환
1:M 관계 변환
- 논리 데이터 모델에서 존재하는 관계 중에서 가장 많은 형태의 관계이다.
- M쪽 관계의 형태에 따라서 관계 컬럼의 선택 사양이 결정된다.
1:M 관계에서 1쪽이 Mandatory 관계일 때의 변환 시 주의사항
- 자식 쪽의 레코드가 반드시 하나 이상은 되어야만 부모 쪽의 레코드를 생성할 수 있다.
- 자식 쪽의 레코드를 삭제할 경우에는 전체를 다 삭제할 수는 없고 반드시 하나 이상의 자식 레코드를 남겨두어야 한다. 또는 자식, 부모 레코드를 동시에 삭제해야 한다.
1:1 관계 변환
- 1:1 관계는 논리 모델에서는 자주 발생하지는 않는 관계이다.
- 이러한 1:1 관계를 물리 모델로 변환하는 과정은 관계의 Optinality에 따라서 다른 방법으로 적용된다.
- 양쪽 다 Optional인 경우에는 보다 빈번하게 사용되는 테이블이 외래키를 가지는 것이 유리하다.
변환 시 주의사항
- 1:1 관계에 의해서 생긴 모든 외래키 부분은 Unique Key가 필수적이다.
- 한쪽이 Optional이고 다른 한쪽이 Mandatory라면 Mandatory 쪽의 테이블에 외래키가 생성된다.
- 양쪽 다 Mandatory라면 변환 시에 어떤 테이블에 외래키를 생성할 것인지를 선택해야 한다.
1:M 순환 관계 변환
- 대부분의 경우는 데이터의 계층 구조를 표현하기 위해서 이러한 관계를 사용한다.
- 특성상 최상위 관계 속성은 항상 Optional인 형태의 관계이어야 한다.
- 경우에 따라서 최상위의 관계 속성에 특정 값을 지정하는 경우도 존재한다.
배타적 관계 변환
- 외래키 분리 방법
- 각각의 관계를 관계 컬럼으로 생성하는 방법이다.
- 외래키 제약조건을 생성할 수 있다는 장점이 있다.
- 각각의 키 컬럼들이 Optional이어야 한다.
- 체크 제약조건을 추가적으로 생성하여야 한다.
- 외래키 결합 방법
- 각각의 관계를 하나의 관계 컬럼으로 생성하는 방법이다.
- 외래키 제약조건을 생성할 수 없다는 단점이 있다.
- 각각의 관계를 선택적으로 구분할 수 있는 추가적인 컬럼이 필요하게 된다.
관리상 필요한 컬럼 추가
- 논리 데이터 모델에는 존재하지 않지만 관리상의 이유로 혹은 데이터베이스를 이용하는 프로그래밍이 좀 더 빠르게 수행되도록 하기 위해 테이블이나 컬럼을 추가할 수 있다.
- 예를 들어, 해당 데이터를 등록한 일자나 시스템 번호 등은 관리상의 이유로 필요한 것들이다.
데이터 타입 선택
- 논리 데이터 모델에서 정의된 논리적인 데이터 타입을 물리적인 DBMS의 특성과 성능 등을 고려하여 최적의 데이터 타입을 선택하는 작업이다.
- 문자 타입
- 세부 문자 타입 선택을 위한 기준
- 영문만 사용되는가?
- 4000자 혹은 8000자 이상의 문자열이 포함되는가?
- 입력되는 값의 길이가 일정한가?
- 세부 문자 타입 선택을 위한 기준
- 숫자 타입
- 세부 숫자 타입 결정
- 불린(Boolean) : 참 혹은 거짓을 저장하는 경우에 선택한다.
- 정수(Integer) : 소수점 이하를 처리하지 않는 경우에 선택한다.
- 소수(Decimal) : 소수점 이하를 처리하는 경우에 선택한다.
- 화폐(Money) : 금액을 저장하기 위한 경우에 선택한다.
- 세부 숫자 타입 결정
- 날짜 타입
- 세부 날짜 타입 선택을 위한 기준
- 대부분의 DBMS에서는 날짜 타입에 일자뿐만 아니라 시분초의 정보도 같이 저장한다.
- 일반적인 시간까지를 저장할 것이냐 아니면 이러한 정밀한 시간을 저장할 것이냐에 따라 날짜 타입을 결정한다.
- 세부 날짜 타입 선택을 위한 기준
데이터 표준 적용
- 논리 데이터 모델링 과정에서 정의된 엔티티, 속성, 관계들을 여러 가지 기준으로 물리 데이터 모델로 변환한다.
- 이 과정에서 필수적으로 엔티티명에 해당하는 테이블명을 생성하고, 속성 또는 관계에 해당하는 컬럼명을 생성한다.
- 이름을 변환하는 과정에서 전사적으로 미리 생성된 데이터 표준을 따르게 된다.
데이터 표준 적용 대상
- 데이터베이스 : 테이블의 집합으로 통합 모델링 단계의 주제 영역이나 애플리케이션 모델링 단계의 업무 영역에 대응되는 객체이다.
- 스토리지 그룹 : 물리적인 디스크를 묶어서 하나의 그룹으로 정의해 놓은 것이다.
- 테이블스페이스 : 테이블이 생성되는 물리적인 영역이며, 하나의 테이블 스페이스에 하나 또는 그 이상의 테이블을 저장할 수 있다.
- 테이블 : 논리 설계 단계의 엔티티에 대응하는 객체이다.
- 컬럼 : 논리 설계 단계의 속성에 대응하는 객체이다.
- 인덱스 : 테이블에서 특정 조건의 데이터를 효율적으로 검색하기 위한 색인 데이터이다.
- 뷰 : 테이블에 대한 재정의로서 물리적으로 테이블의 특정 컬럼, 특정 로우를 뷰로 정의하여 특정 사용자만 접근이 가능하도록 할 수 있다.