SKN/02. DB

04. 개념/논리/물리 모델

claovy☘️ 2025. 2. 19. 17:28

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