본문 바로가기

Study/Concepts

DAY 75. DB - 논리적 모델링

 

논리적 모델링(데이터 모델링)

개념 설계에서 추상화된 데이터를 구체화하여 개체, 속성을 테이블화하고 상세화 하는 과정

ERD를 가지고 실제 insert한 값을 추가, 삭제, 수정 할 때 데이터 중복과 같은 이상 현상시 정규화 과정을 통해 해소시킨다.

정규화 과정에 초점을 맞춘다.

 


 

정규화(DB normalization)

데이터 모델링 목적

데이터가 증가 → 데이터 중복도 증가 → 애플리케이션으로 해결

데이터가 증가 → SQL 응답 속도 저하 → SQL 튜닝으로 해결

그러나 근본적인 문제를 해결하지 않으면 큰 문제를 초래할 수 있기 때문에 데이터 모델링 작업을 한다.

& 데이터 모델링 기술력 확보

 

정규화

관계형 데이터 베이스에서 데이터를 구조화 하는 작업 = 중복을 찾아 제거해 나가는 과정

  • 데이터의 중복 방지, 효율적으로 데이터 저장하기 위한 목적
  • 삽입, 삭제, 갱신 이상의 발생 가능성 줄이기 위한 목적

하나의 엔티티가 하나의 정보만을 담도록 데이터를 쪼개는 과정

 

이상(anomaly)

✔️ 삽입 이상(insert)

불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능

내가 원하는 정보만 넣고 싶을 때 다른 값들은 NULL 값을 넣어야 한다.

✔️ 삭제 이상(delete)

유용한 정보를 함께 삭제하지 않으면 어떤 정보를 삭제하는 것이 불가능

✔️ 갱신 이상(update)

반복된 데이터 중에 일부만 수정하면 데이터의 불일치가 발생

 

 


 

정규화 과정

제 1 정규화

엔티티에서 하나의 속성이 복수의 값을 갖도록 설계되었을 때, 하나의 속성이 단일 값을 갖도록 하는 과정

  • 방법1) 어떤 속성 때문에 계속 반복되는 값이 있다면 그것을 뽑아서 부모 엔티티로 만든다. 이 때, 부모 엔티티의 주식별자가 자식키의 외래키로 들어간다.
  • 방법2) 인위적인 주식별자를 만든다. 외래 식별자로서 사용하게 된다.
<제 1 정규화 순서>

1. 엔티티에 인스턴스를 삽입했을 때 중복, NULL을 가지는 속성들을 별도의 엔티티로 추출한다.

2. 기존 엔티티의 주식별자가 모두 추출된 경우 새로운 주식별자를 지정해야 한다.

—> 남아있는 기본 속성 중에 주식별자가 될 수 있는 속성이 있는지 판단하고, 없는 경우 인위적으로 주식별자를 추가한다.

3. 추출된 엔티티를 부모, 기존 엔티티를 자식 엔티티로 지정한다.

4. 참여도를 파악한다.

5. 식별/비식별 관계를 파악한다.

 

제 2 정규화

주식별자가 아닌 속성 중(일반 속성들 중에서), 주식별자 전체가 아닌 일부 속성에 종속된 속성을 찾아서 제거하는 것

복합키가 있는 엔티티(주식별자가 2개 이상인 엔티티) 중에서만 제 2 정규화가 가능하다.

→ 주식별자 2개가 꼭 필요하거나 알아야 하는 속성이 아니라면 제거 혹은 분리해 나간다.

 

<제 2 정규화 순서>

1. 복합키를 가진 엔티티의 기본 속성 중에 주식별자 전체에 종속되지 않는 기본 속성부분 종속시키는 주식별자별도의 엔티티로 추출한다.

2. 추출된 엔티티를 부모, 기존 엔티티를 자식 엔티티로 지정한다.

3. 참여도를 파악한다.

4. 식별 관계로 지정한다.

 

 

제 3 정규화

주식별자가 아닌 속성들 중에서 종속 관계에 있는 속성을 찾아 제거하는 것

<제 3정규화 순서>

1. 기본 속성 중에 주식별자가 아닌 기본 속성에 종속되는 속성들을 별도의 엔티티로 추출한다.

—> 종속하고 있는 기본 속성별도 엔티티의 주식별자로 지정한다.

2. 추출된 엔티티를 부모, 기존 엔티티를 자식 엔티티로 지정한다.

3. 참여도를 파악한다.

4. 비식별 관계로 지정한다.

'Study > Concepts' 카테고리의 다른 글

소프트웨어 공학 3R  (0) 2022.03.25
DAY 76. DB - 물리적 모델링  (0) 2021.11.02
DAY 74. DB - 개념적 모델링  (0) 2021.10.31
DAY 72. DB - DB 모델링  (0) 2021.10.29
DAY 71. UML - 시퀀스 다이어그램  (0) 2021.10.28