1. 개념 모델
01. 개념 모델이란?

- 요구분석 단계에서 정의된 핵심 엔터티와 주요 속성을 도출하고 관계를 도출하여 ERD를 생성하는 단계이다
- 데이터의 범위나 구조를 용이하게 파악할 수 있는 상위 수준의 ERD 형태이다
02. 개념 모델의 목적
- 요구 사항을 이해관계자들이 이해할 수 있도록 데이터로 간결하게 표현하는 것이다.
- 대규모 프로젝트에서 개발자가 업무의 큰 틀을 잡는 데 도움을 준다.
- 개발 프로젝트 뿐 아니라 시스템의 유지, 보수에 있어서도 유용하게 사용할 수 있다.
03. 개념 모델의 주의사항
- 이해 관계자들 사이에서 해석이 다르지 않도록 정확한 의사소통을 해야 한다.
- 개념 모델에서는 데이터만을 대상으로 표현해야 한다.
- 논리 모델링 기간의 1/3 정도에 해당하는 기간을 소요해서라도 의사소통을 하자
2. 논리 모델
01. 논리 모델이란
- 개념 모델을 상세화하는 작업 (정규화)
- 전체 속성을 도출하고 도출되지 않은 대부분의 엔터티들과 관계들을 도출하는 단계
02. 논리 모델의 목적
- 업무(요구사항 명세)에 대해 충분히 의견을 교환하여 반영하여 진행하는 데 도움을 준다
- 중복값을 제거하고 이상현상을 제거하기 위해 속성 간에 종속 관계를 확인하고 엔터티를 분할한다
03. 논리 모델의 주의 사항
- 업무 요건을 빠짐없이 정확히 반영해야 한다
- 더 이상 삭제할 엔터티나 속성은 없어야 한다
- 주 식별자에 있어 효율성에 따라 인조 식별자를 채택할지 결정한다
3. 물리 모델
01. 물리 모델이란

- 실제로 데이터베이스에 이식할 수 있도록 모델의 구조보다는 인덱스, 뷰, 테이블 타입과 사용하는 DBMS와 같은 물리적 요소에 집중하여 데이터베이스를 설계하는 단계이다.
- 성능을 고려해 비정규화(Denormalyzation)를 진행하는 단계이다.
02. 논리적 DB 설계 vs 물리적 DB 설계
| 논리적 DB 설계(데이터 모델링) | 물리적 DB 설계 |
| DBMS의 종류나 제품에상관없이 진행 (ERD는 어떤 데이터베이스를사용해도 적용 가능) | 특정 DBMS를 전제로 진행(적용 DBMS의 특성을 고려) |
=> 물리 모델링의 목적 : 성능을 최적화 하기 위해 성능을 거려하여 엔터티를 합치거나 모델 구조를 약간 변경(비정규화)할 수 있다.
03. 물리 모델의 주의 사항
- 모델의 구조는 많아도 10% 이내의 변화 정도만 이루어 져야 한다.
- 화면이나 SQL이 작성되면서 필요한 인덱스와 뷰를 도출한다.
- 비정규화는 특정 성능 문제를 해결하기 위한 목적이 아니라면 고려하지 않는다.
- 슈퍼타입과 서브관계의 물리적 변환을 한다.
04. 슈퍼타입과 서브타입
- 슈퍼타입
- 여러 개의 서브타입이 공유하는 공통 속성을 가진 상위 개체
- 서브타입
- 슈퍼타입을 상속받아 추가적인 속성을 가지는 개체
4. 성능 개선
01. 뷰와 인덱스 설계
뷰?
- 하나의 테이블, 혹은 여러 테이블에 대하여 특정 사용자나 조직의 관점에서 데이터를 바라볼 수 있도록 해주는 수단으로서 가상 테이블이라고도 부른다.
- 복잡한 쿼리가 요구되는 것들을 접근 권한 제어를 위해 생성할 수 있다.
인덱스?
- 인덱스는 검색의 기준이 되는 컬럼만을 뽑아 정렬한 상태를 유지하고 있으며 인덱스의 각 튜플은 원래 데이터가 저장되어 있는 테이블에 대응하는 튜플의 주소 값을 가지고 있다.
- SQL의 WHERE절에서 비교 대상이 되는 컬럼 또는 JOIN에 사용되는 컬럼이어야 한다.
- 튜플의 수가 적으면 인덱스를 지정하여도 별 효과가 없다.
- 인덱스로 지정한 컬럼에 의해 검색했을 때 검색 결과가 전체 튜플의 10~15% 미만일 때 인덱스의 효과가 있다.
- 기본키로 지정한 컬럼에 대해서는 자동적으로 인덱스를 만들어 준다.
02. 비정규화
(1) 비정규화란?
💡 정규화 작업이 완료된 후, 데이터 물리 모델링 과정 중에서 시스템의 성능 향상, 개발 과정의 편의성, 운영의 단순화를 추구하는 것 (특히 검색 속도)
(2) 비정규화의 종류
1. 수직 분할

- 엔터티의 튜플 수 및 속성의 수가 매우 많고, 엔터티의 속성들이 그룹화되어 각 그룹이 특정 부서 혹은 응용 프로그램에 의해서만 사용될 때 수직 분할한다.
- 엔터티의 데이터량이 많을수록 검색속도는 느려지므로, 엔터티를 분할하여 데이터량을 줄임으로써 성능 향상을 도모할 수 있다.
- 수직 분할은 반복되지는 않지만 속성들이 그룹화 되어 각 그룹이 특정 부서 혹은 응용프로그램에 의해서만 사용될 때에 사용할 수 있으며 수직 분할하면 본래 하나의 엔터티였기 때문에 카디널리티는 1:1이 된다.
2. 수평 분할

- 튜플의 검색빈도가 다르다는 점을 이용하여 엔터티를 분할하면, 엔터티의 데이터 크기가 감소하여 성능 향상의 효과를 볼 수 있다.
- 수평 분할 결과로 나온 엔터티 중 도서정보_A는 자주 검색되는 상위 20%의 도서이고 도서정보__B는 나머지 80%의 도서이다. 즉, 20%의 책이 전체 검색 빈도의 80%를 차지한다고 생각할 수 있으며 수평분할 된 엔터티는 속성은 동일하지만 서로 아무런 관계도 성립하지 않는다.
3. 속성 중복

- 주문 내역에 주문업체 속성이 중복되게 추가한 것으로 조인을 하지 않고 주문내역으로부터 주문업체 정보를 얻을 수 있다.
- 과도하게 중복된 속성들을 사용하게 되면 데이터의 무결성이 깨질 수 있다. (데이터의 불일치)
- 입력, 수정, 삭제에 있어 응답시간이 늦어질 수 있다.
4. 엔터티 통합

- 항상 혹은 대부분 조인에 의한 검색을 하고, 검색이 빈번히 이루어지는 두 개 이상의 엔터티를 대상으로 한다.
- 조인 연산에 걸리는 시간을 단축시켜 준다.
- 중복이 존재할 수 있어 이상(Anomaly) 현상이 발생할 수 있다는 것을 고려해야 한다.
'SKN > 02. DB' 카테고리의 다른 글
| 14. DML (0) | 2025.02.20 |
|---|---|
| 13. SQL 작성 (select / order_by / where / distinct) (0) | 2025.02.19 |
| 12. 백업 및 복원 (0) | 2025.02.19 |
| 11. STORED PROCEDURE / Trigger (0) | 2025.02.19 |
| 10. VIEW (0) | 2025.02.19 |