데이터베이스/SQLD 공부

[SQLD 1과목] 2장 데이터 모델과 SQL

DoMyBestForDeveloper 2026. 2. 8. 02:06

성능 데이터 모델링의 개요

성능 데이터 모델링의 정의

  • 성능 저하의 원인 중 하나는 데이터 모델링의 근본적인 디자인이 잘못되어 있는 경우가 많음
  • 성능 데이터 모델링을 통해 성능 향상을 도모
  • 성능 데이터 모델링: 데이터베이스 성능 향상을 목적으로 설계 단계의 데이터모델링 때부터 성능과 관련된 사항이 모델링에 반영될 수 있도록 하는 것

성능 데이터 모델링 수행 시점

  • 사전에 성능 모델링을 할수록 성능 향상을 위한 비용은 적게 듦
  • 분석/설계 단계에서 성능을 고려해 데이터 모델링을 수행할 경우 재업무 비용을 최소화할 수 있음
  • 따라서 분석/설계 단계에서 처리 성능을 향상시킬 방법을 고려해야 함

성능 데이터 모델링 고려 사항

  • 성능 데이터 모델링 프로세스
    • 정규화 > 정규화
    • DB 용량 산정
    • 트랜재견의 유형 파악 > 테이블 수직 분할 할 때 (반정규화)
    • 용량과 트랜잭션의 유형에 따라 반정규화
    • 이력모델 조정, PK/FK 조정, 슈퍼타입/서브타입 조정
    • 성능 관점에서 데이터 모델을 검증

정규화

정규화의 정의

엔티티를 작은 단위로 분리하는 과정 -> 큰 엔티티를 작은 엔티티들로 분리하고 관계 맺음

논리 데이터 모델에서 행하는 과정

 

장점

  • 데이터의 무결성을 위한 수행
  • 최소한의 데이터만을 하나의 엔티티에 넣는 과정, 데이터 분해 과정
  • 데이터 일과넝 확보
  • 데이터 독립성 확보 > 데이터 중복 제거
  • 데이터 유연성 확보 > 필요 데이터들의 분할로 인해 유연하게 접근 가능
  • 입력, 수정, 삭제 성능은 일반적으로 향상 -> 조회 성능이 저하될 수 있음

 

단점

  • 엔티티 개수 증가
  • 관계 증가
  • 데이터 조회 시 여러 번의 조인이 요구됨
  • 조회 성능 저하: 식별자는 join 최소화

 

정규화의 종류

제 1 정규화

테이블 칼럼들이 원자성(특성의 중복을 방지) 갖게 하기 위해 엔티티 분해

하나의 인스턴스가 비슷한 속성을 여러 개 가지지 않게 하기 위해 분리하는 것

 

제 2 정규화

엔티티의 모든 일반 속성은 반드시 주 식별자의 모든 속성들에 부분 종속이 아닌 완전 종속을 가져야 함

이때 만약 부분 종속을 가지는 일반 속성이 있다면 해당 속성과 해당 속성의 결정자인 부분 종속을 이루고 있는 주 식별자의 속성을 따로 떼어내 추가적인 엔티티를 만들어 제 2 정규형을 만족하는 릴레이션을 구축하는 것

 

주 식별자의 속성이 아닌 일반 속성끼지 종속 관계를 맺어도 이에 대해 해당 일반 속성이 새로운 엔티티에서 제 2 정규성을 만족하도록 엔티티를 추가적으로 만들어줌

 

제 3 정규화

정규화된 엔티티의 일반 속성들은 주 식별자에만 함수적 종속을 가져야 함

그런데, 만약 주 식별자의 속성들끼리 종속 관계를 가지고 그 이후에 또 일반 속성에 대해 결정자가 되거나, 일반 속성끼리 종속성을 가지는데 이때의 결정자가 주 식별자 속성에 종속되어이있음

 A>B, B>C와 같은 이행적 종속ㅇ르 이루는 엔티티일 때 

 

이러한 이행적 종속을 깨도록 추가적인 엔티티를 만들고 관계를 형성해주는 것인 제 3 정규화

 

BCNF 정규화

모든 결정자가 후보키가 되도록 테이블을 분해하는 것

-> 후보키: 식별자의 유일성, 최소성을 만족하는 속성 집합(단일 속성)

 

제 4 정규화

여러 칼럼이 하나의 칼럼 종속시킬 때 분해해서 다중값 종속성 제거

 

제 5 정규화

조인에 의해 새로운 종속성 발생 시 이를 막기 위해 엔티티 재분해

 


관계와 조인의 이해

관계

부모 엔티티의 식별자를 자식에 상속하고, 상속된 속성을 매핑키(조인키)로 활용

 

관계의 분류

  • 존재 관계
  • 행위 관계

조인

데이터 중복을 피하기 위해 테이블은 정규화에 의해 분리

이렇게 분리된 테이블을 동시에 출력하거나 관계가 있는 테이블 참조 위해서는 테이블 연결

이때 이러한 연결 과정을 JOIN이라고 함

 

 

계층형 데이터 모델

하나의 엔티티 내에서 인스턴스끼리 계층 구조를 가지는 경우

계층 구조를 갖는 인스턴스끼리 연결하는 조인을 셀프 조인이라고 함

 

상호배타적 관계

하나의 부모가 2개의 자식 엔티티를 가질 때 행위 조거에 따라 두 자식 중 하나의 자식만 관계를 가질 수 있는 것을 상호배타적 관계라함

 

 


트랜잭션의 이해

트랜잭션의 특징

  • 하나의 연속적인 업무 단위를 의미
  • 트랜잭션에 묶인 엔티티들은 필수적 관계를 가짐
  • 하나의 트랜잭션에 속한 동작들은 모두 성공하거나, 모두 취소(UNDO)되어야 함 -> 트랜잭션의 원자성
  • 서로 독립적으로 업무가 발생하면 안됨. 순차적
  • 부분 커밋 불가, 동시 커밋 & 롤백

 

필수적, 선택적 관계와 ERD

  • 두 엔티티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
  • 두 엔티티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현

 

IE 표기법

  • 원을 사용해 필수적 관계와 선택적 관계를 구분
  • 필수적 관계에는 원을 그리지 않음
  • 선택적 관계에는 관계선 끝에 원을 그림

Barker 표기법

  • 실선과 점선으로 구분
  • 필수적 관계는 관계선을 실선으로 표기
  • 선택적 관계는 관계선을 점선으로 표기

 


본질 식별자와 인조 식별자

원조(본질) 식별자: 업무에 의해 만들어지는 식별자(꼭 필요한 식별자)

인조(대리) 식별자: 원조 식별자가 PK 2개 이상이 복합 식별자일 때

  • 인조 식별자: 속성들을 하나의 속성으로 묶어서 사용
  • 꼭 필요하지 않지만 편의성을 위해 인위적으로 만들어지는 것

인조 식별자의 단점

  • 중복 데이터 발생 가능성 -> 데이터 품질 저하
  • 불필요한 인덱스 생성 -> 저장 공간 낭비 및 DML 성능 저하
  • 개발 편의성이 줄어들 수 있음

'데이터베이스 > SQLD 공부' 카테고리의 다른 글

[SQLD 1과목] 1장 데이터 모델링의 이해  (0) 2026.02.08