1. M : N 관계 해소 방법 

1) 관계 엔티티로 분리 

한 고객이 여러 번 방문한 방문일, 방문내용을 관리해야 한다.

고객 엔티티의 속성만으로 존재할 수 없고, 새로운 엔티티가 생성된다.

관계는 고객과 1 : M 관계로 설정되어야 한다. 
관계.png

2) 부모 엔티티에 속성 추가


관계1.png

3번 이상 방문시에는 테이블도 수정하고 프로그램도 수정해야 한다. 

2. 1 : 1 관계 해소 방법 

1 : 1로 대응되었다는 사실은 해당 엔티티의 PK가 동일한 경우를 의미한다.

1) 별개의 엔티티로 표현

    두 엔티티의 생성 시기가 명확하게 구분

    타 엔티티와의 관계가 서로 다른 경우 

2) 하나의 엔티티로 통합

    데이터를 선택할 때 항상 두 엔티티의 정보를 같이 가져와야 하고, 두 엔티티가 갖고 있는 다른 엔티티와의 관계가 비슷한 경우 

3) 슈퍼엔티티 생성 

3. 코드 엔티티 설계 방법


관계2.png
 
이와 같이 한 개의 속성만 가지는 코드의 엔티티는 다음과 같이 통합 엔티티로 설계한다.
 
 
관계3.png
 
 
 
관계4.png
 
 
각각의 코드에 별도의 제약이 있을 수 있는 것을 가정하여 코드규칙명1, 코드규칙1을 표현함으로써 전체 업무에서 효과적으로 사용할 수 있다.
 
부서코드나 사업소코드 등은 각각의 코드에 따라 여러 개의 속성이 존재하며 별도의 엔티티로 관리하도록 한다.
 
 

4. 도미노 속성에 대한 데이터 모델링 방법 

앞의 값에 규칙적인 제약이 연쇄적으로 발생하는 경우를 도미노 속성이라 한다.
 
관계5.png

  • 도미노 1 : DOM01 의 경우 CD001의 A, B가 올 수 있다.
  • 도미노 2 : CD001 의 경우 A에 따라서는 CD013이 1001과 1002가,  B에 따라서는 1001이 올 수 있다. 
  • 도미노 3 : CD013 의 경우 1001에 대해서는 CD201이 01과 02가 올 수 있으며,  1002에 대해서는 01 이 올 수 있다.
  • 도미노 3 : CD201 의 01에 대해서는 CD723의 코드가 OA가 올 수 있으며,  02에 대해서는 CV, FS가 올 수 있다. 

1) 해당 업무에서 도미노가 발생할 수 있는 최대값을 정의하여 모델링 하는 방법


관계6.png

위 모델은 도미노 제약이 최대 4레벨을 넘지 않은 경우에 적용 

2) 도미노 속성을 BOM 을 이용하여 모델링하는 방법


관계7.png

도미노 구분과 순번을 제외한 순수한 도미노 속성간의 관계는 BOM과 같은 M:N의 자기 참조 관계를 가지고 있다.

도미노 속성의 BOM 모델은 도미노의 최대값 정의가 불확실하고 여러 개의 도미노 속성을 묶어 하나의 값처럼 사용하지 않고, 항상 상위 코드를 이용하여 하위 코드를 찾는 것처럼 연쇄적으로 이용할 때 사용하는 것이 좋다.  

5. 이력 엔티티 설계 방법 

하나의 업무 단위가 시간이 흐름에 따라 발생하는 과거와 현재 데이터를 지속적으로 유지하는 관리 방법을 이력 관리라 하고, 이력 관리를 위해 데이터 모델에 반영하여 표현한 뎅티티를 이력 엔티티라 한다. 

1) 이력이 발생하는 유형 

관계8.png

변경 이력 : 변경 이전과 이후의 데이터를 모두 관리

발생 이력 : 년, 월, 일 등 시간 순으로 발생

진행 이력 : 업무 진행 상태에 따라 업무의 상태 정보를 관리


관계9.png
 
 
 
2) 이력 엔티티 설계시 고려 사항
 
■ 진행이력의 경우 종료일자에 대한 고려
 
공사가 진행된 상태가 반드시 한 번씩 존재하고 데이터를 조회할 때 진행 상태 코드를 많이 이용하는 경우 위와 같이 모델링한다.
만약 진행상태 시작일자에 대해서 유일하고, 조회도 시작일자 기준으로 조회한다면 시작일자를 PK로 처리한다.
 
관계10.png

이 때 종료일자를 가져가는 것이 쿼리 성능을 보장할 수 있다. 

종료일자가 없는 상태에서 2002년 7월 15일자에 해당하는 공사 진행 상태를 조회하려면, 인라인뷰가 포힘되어 있고 풀 테이블 스캔이나 인덱스 스캔의 범위가 넓어져 성능 또한 저하된다. 

SELECT A.진행상태시작일자, A.공사번호, A.진행상태코드
FROM 공사진행 A, (SELECT MAX(진행상태시작일자) 진행상태시작일자 FROM 공사진행 WHERE 진행상태시작일자 <= '20020715') B
WHERE A.진행상태시작일자 = B.진행상테시작일자


종료일자를 포함한다면, 

SELECT A.진행상태시작일자, A.공사번호, A.진행상태모드
FROM 공사진행 A
WHERE A.진행상태시작일자 <= '20020715'
AND A.진행상태종료일자 > '20020715'


또한 새로운 데이터 입력시 진행상태종료일자에는 업무적으로 입력되는 데이터가 있을 수 없지만, 최대값(999년 1월1일)을 입력하여 인덱스를 이용하는데 문제가 없도록 한다. 

 변경이력, 발생이력의 겨우 최신여부 속성에 대한 고려

변경이력, 발생이력의 경우에도 데이터 량이 많기 때문에 성능을 위해 최신여부 속성이 필요한 경우가 많다.

단 새로운 데이터 입력시 이전 변경일자에 대한 최신여부 값을 ‘Y’에서 ‘N’으로 바꾸어야 하는 부가 작업이 발생한다. 

 6. 효율적인 채번 방법

대리식별자인 일련번호 체계를 사용하는 데이터 모델에서는 채번(PK값을 증가하는 형식으로 생성하는 것)을 해야하는데, 다음과 같은 세 가지 방법이 있다.


 

방법 처리방법 장점 단점
채번 테이블 채번 테이블 이용 -DUP에러 없음 
-일련번호 체계 가능
-LOCK 유발 
-성능 저하 
-관리 항목 증가
테이블에 최대값 적용 INSERT INTO 테이블(번호, COL2, ...) 
SELECT DECODE(MAX(전호), MULL, 1, MAX(번호)+1) 일련번호 FROM 트랜잭션 WHERE ROWNUM = 1;
-관리 항목 증가 없음 
-빠른 성능 
-일련번호 체계 가능
-이론적 DUP 에러 가능
시퀀스 오브젝트 이용 Create sequence 테이블_seq 
          increament by 1 
          start with 1 
          maxvalue 10000000000 
          cache 30;
-빠른 성능 
-DUP 에러 없음 
-LOCK 없음
-관리 항목 증가 
-일련번호 체계 불가능


7. 아크관계

어떤 엔티티가 두 개 이상의 다른 엔티티의 합집합과 관계를 가지는 것을 배타적(Exclusive) 혹은 아크(Arc) 관계라고 한다. 

(1) 외부키 분리 

각각의 컬럼을 별도로 분리하는 방법으로, 각각의 외부키는 별도의 컬럼으로 지정되며, 어느 한 컬럼에 값이 입력될 때, 다른 외부키는 항상 NULL값을 가진다. 


이 방법은 대개의 경우, 인덱스의 수를 증가시키게 되며, 조인을 할때도 불리하다.

각각의 사항에 독립적으로 엑세스가 수행되는 경우에 사용하는 것이 좋으며, 특별한 경우가 아니라면 사용하지 않는 것이 바람직하다.

외부키를 하나로 통합하는 것

외부키를 하나로 통합했을 때, 각 외부키를 구분하기 위해 별도의 구분컬럼을 같이 지정하게 된다.  

(2) 외부키 통합

외부키를 하나로 통합하는 것

외부키를 하나로 통합했을 때, 각 외부키를 구분하기 위해 별도의 구분컬럼을 같이 지정하게 된다. 

 

번호 제목 글쓴이 날짜 조회 수
공지 [기술 보고서 다운로드] IDC Technology Spotlight: 모델 기반 데이터 설계를 통한 비즈니스 민첩성 확보 방안 관리자 2015.08.24 8536
공지 ER/Studio Team Server(ER/Studio 용 웹포탈) 설치 및 사용자 가이드 손보라 2014.07.15 39743
공지 Repository 설치 및 사용 가이드 손보라 2014.05.27 50504
공지 ER/Studio Data Architect 설치 및 사용자가이드 관리자2 2012.01.27 52912
142 [기술백서] ER/Studio를 활용한 데이터 표준화 시스템 구축방안 관리자 2014.11.12 1156
141 DB Power Studio #4-2. DBArtisan 둘러보기(데이터베이스 보안 관리) 손보라 2014.08.20 1175
140 DB Power Studio #4-5. DBArtisan 둘러보기(데이터 관리) 손보라 2014.08.21 1179
139 DB Power Studio #4-6. DBArtisan 둘러보기(데이터베이스 성능 관리) 손보라 2014.08.22 1187
138 DB Power Studio #4-3. DBArtisan 둘러보기(데이터베이스 공간 관리) 손보라 2014.08.21 1203
137 DB Power Studio #4-7. DBArtisan 둘러보기(메뉴 기능) 손보라 2014.08.22 1212
136 DB Power Studio #4-4. DBArtisan 둘러보기(SQL 관리) 손보라 2014.08.21 1276
135 ER/Studio 기본 가이드 #6. ER/Studio Data Architect로 메타데이터 import & export하기 손보라 2014.08.07 1277
134 ER/Studio 기본 가이드 #5. ER/Studio Data Architect의 데이터 딕셔너리 사용하기 손보라 2014.08.06 1297
133 DB Power Studio #4-1. DBArtisan 둘러보기(오브젝트 및 스키마 관리) 손보라 2014.08.20 1319
132 ER/Studio 기본 가이드 #4. ER/Studio Data Architect로 모델 간 비교 및 차이점 반영하기 손보라 2014.08.05 1323
131 DB Power Studio #1. DB Optimizer 둘러보기 손보라 2014.08.09 1334
130 DB Power Studio #3-2. Rapid SQL 둘러보기(비주얼 쿼리 빌더) 손보라 2014.08.19 1343
129 [기술백서] 데이터아키텍트가 비즈니스 업무 부서와 협업하기 위해 알아야 할 다섯가지 관리자 2014.09.26 1343
128 [기술백서] ERwin이 아닌 ER/Studio를 선택하는 10가지 이유 관리자 2014.11.12 1347
127 ER/Studio 기본 가이드 #2. ER/Studio Data Architect로 논리/물리 모델링 시작하기 손보라 2014.08.01 1350
126 ER/Studio 기본 가이드 #3. ER/Studio Data Architect로 기존 데이터베이스 문서화하기 손보라 2014.08.04 1354
125 ER/Studio 기본 가이드 #1. ER/Studio Data Architect로 데이터모델링 시작하기 손보라 2014.08.01 1361
124 DB Power Studio #3-1. Rapid SQL 둘러보기(SQL 작성) 손보라 2014.08.18 1388
123 [온라인 세미나 발표자료] 스마트한 DBMS관리: DB PowerStudio 따라잡기, LIVE! 관리자 2014.09.25 1406