DB 모델링

 


1. 데이터 모델링

  • 데이터 모델링은 업무보다는 데이터를 중심으로 모델링을 진행하는 방법
  • 데이터 모델링은 일반적으로 개념적 모델링, 논리적 모델링, 물리적 모델링 3가지 과정으로 분류

 

2. 개념적 모델링 

  • 요구분석 단계에서 정의된 핵심 개체와 그들 간의 관계를 바탕으로 ERD를 생성하는 단계
    • ERD :  Entity Relationship Diagram

2.1. 엔티티(Entity)

  • 엔티티란 실제로 관리해야 할 구체적인 대상을 의미
    • 유형 엔티티 : 물리적인 형태가 있는 엔티티
    • 무형 엔티티 : 물리적인 형태는 없지만 개념적으로 존재

 

2.2. 속성(Attribute)

  • 속성이란 엔티티가 가지고 있는 특징을 의미 (최소 데이터 단위)

2.2.1. 주 식별자
  • 엔티티에 있는 데이터들을 서로 구분을 해 줄 수 있는 속성을 의미  (기본키에 해당)
    • 반드시 값이 존재
    • 값이 중복되어서는 안됨
2.2.2. 보조 식별자
  • 보조 식별자는 주 식별자를 대체할 수 있는 또 다른 속성을 의미
2.2.3. 외래 식별자 (외래키에 해당)
  • 엔티티와의 관계를 연결해 주는 식별자를 외부 식별자라고 함
    • 값이 없어도 가능
    • 주 식별자 or 보조 식별자와 연결

 

2.3. 관계(Relationship)

2.3.1. 일대일(1:1, One To One) 관계
  • A 엔티티에 존재하는 1건의 데이터와 대응되는 B 엔티티의 데이터도 1건일 경우

학생tbl 학번 / 교수tbl번호 > 주 시별자 학생tbl > 외래 식별자

2.3.2. 일대다(1:M, One To Many) 관계
  • A 엔티티에 존재하는 1건의 데이터와 대응되는 B 엔티티의 데이터가 여러 건일 경우

2.3.3. 다대다(M:M, Many To Many) 관계
  • A 엔티티에 존재하는 여러 건의 데이터와 대응되는 B 엔티티의 데이터가 여러 건일 경우 M:M 관계

수강과목 tbl 학번, 학과번호 > 식별관계


식별관계 > 학번과 과목번호 모두 값이 존재해야지 데이터가 저장
비식별관계 > 학번과 과목번호 값이 존재하지 않아도 데이터가 저장

2.3.4. 식별, 비 식별 관계
  • 식별 관계는 부모 엔티티의 주 식별자를 자식 엔티티의 주 식별자, 외래 식별자로 사용하는 관계
  • 비 식별 관계는 부모 엔티티의 주 식별자를 자식 엔티티의 외래 식별자로만 사용하는 관계
  • 비 식별자로 설계하여 작업을 하다가 오류가 발생하면 식 별자로 사용

 

 

3. 논리적 모델링

 
  • 개념적 모델링 과정에서 추상화된 데이터를 구체화하여 개체, 속성을 테이블화하고 상세화 하는 과정

3.1. 이상 (Anomaly)

  • 정규화를 진행하지 않은 엔티티를 대상으로 삽입, 갱신, 삭제 시 발생할 수 있는 예기치 못한 현상을 이상이라고 함
  • 이상에는 삽입 이상, 갱신 이상, 삭제 이상이 존재

3.1.1. 삽입 이상

 

  • 주문에 대한 정보만 입력해도 제품에 대한 정보도 같이 입력해야 함
  • 제품에 대한 정보만 입력하고 싶을 때 주문에 대한 정보는 NULL 값을 가짐

3.1.2. 갱신이상

  • 동일한 제품명을 중복되어 있는 수만큼 수정해야함
  • 한번만 수정하거나 일부만 수정할 경우 일관성이 맞지 않는 문제가 발생

3.1.3. 삭제 이상

  • 주문에 대한 정보(주문 번호, 주문 수량)를 삭제할 때 제품 번호, 제품명, 단가도 같이 삭제

3.2. 제 1 정규화

  • 하나의 속성이 하나의 값을 갖도록 함

제 1 정규화 예시

3.3. 제 2 정규화

  • 주 식별자 전체에 종속적이지 않는 속성을 분리 (주 식별자가 복합 식별자일 경우)
    • 제 2정규화 이전에 제 1 정규화를 만족해야함

제 2 정규화 예시

 

3.4. 제 3 정규화

    • 주 식별자에 종속적이지 않고 다른 속성에 종속적인 속성을 분리

제 3 정규화 예시

 

 

4. 물리적 모델링

4.1. 물리적 모델링

  • 논리적 모델링 과정에서 표현된 데이터를 실제 데이터베이스에 맞도록 구현하는 과정

  • 엔티티의 속성은 모두 테이블의 컬럼으로 생성
  • 주 식별자는 모두 테이블의 Primary Key로 지정
  • 보조 식별자는 Unique Key로 지정
  • 외부 식별자는 Foreign Key로 지정
  • 추가로 필요한 객체(뷰, 인덱스 등)를 생성
더보기

<테이블 정의서 작성>

 

 

4.2. 반 정규화

  • 반 정규화란 이름 그대로 정규화의 반대
  • A 테이블과 B 테이블이 있을 때 두 테이블을 따로 분리해도 되고 합쳐도 되는 상황이라면 분리하는 것보다 합치는 것이 성능에 더 좋을 수 있음음

 

 

 

 

 

 

+ Recent posts