[SQL] 데이터 모델과 SQL

언교동·2025년 5월 25일

SQL

목록 보기
3/6
post-thumbnail

정규화(Normalization)

  • 엔터티를 작은 단위로 분리하는 과정(엔터티 개수 증가)

  • 목적: 데이터의 정확성과 일관성을 유지하고 보장(데이터 정합성)

  • 조회 성능: 처리 조건에 따라 향상 또는 저하

  • 입력, 수정, 삭제 성능: 일반적으로 향상

cf) 인덱스 생성

  • 조회 성능: 일반적으로 향상
  • 입력, 수정, 삭제 성능: 저하

제1정규형

  • 모든 속성은 반드시 하나의 값만 가져야 한다
  • 원자값이 아닌 도메인 분해

🌱 예시

번호이름과목
101홍길동국어, 수학
102이영희영어

->

번호이름과목
101홍길동국어
101홍길동수학
102이영희영어

제2정규형

  • 엔터티의 모든 일반속성은 반드시 주 식별자에 종속되어야 한다
  • 부분함수 종속성 제거

🌱 예시

학생ID과목교수명성적
1001수학김교수A
1001영어이교수B
1002수학김교수C
1002과학박교수A

->

1. 학생 성적 테이블

학생ID과목성적
1001수학A
1001영어B
1002수학C
1002과학A

2. 과목_교수 테이블

과목교수명
수학김교수
영어이교수
과학박교수

제3정규형

  • 주식별자가 아닌 속성 간에는 서로 종속될 수 없다
  • 이행함수 종속성 제거
사원번호사원이름부서번호부서명
101홍길동D01인사부
102김영희D02회계부
103이철수D01인사부

->

1. 사원 테이블

사원번호사원이름부서번호
101홍길동D01
102김영희D02
103이철수D01

2. 부서 테이블

부서번호부서명
D01인사부
D02회계부

주의사항

  • 정규화를 지나치게 할 경우 필요한 정보를 조회하기 위해 여러 번의 JOIN이 필요하여 오히려 성능이 조화될 수 있음
  • 이를 해결하기 위해 반정규화를 하는 경우도 있음

반정규화

  • 데이터의 중복을 허용하거나 데이터를 그루핑하는 과정

  • 목적: 데이터 조회 성능 향상

  • 조회 성능: 향상

  • 입력, 수정, 삭제 성능: 저하될 수 있음

  • 데이터 합성 이슈 발생할 수 있음

  • 정규화가 끝난 후 수행

테이블 반정규화

테이블 병합

  • JOIN 이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려

  • 1:1 관계 테이블 병합

  • 1:M 관계 테이블 병합

    • 1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합 시 중복 데이터가 많아지므로 테이블 병합에 적절하지 못함
  • 슈퍼 서브 타입 테이블 병합

테이블 분할

  • 테이블 수직 분할(속성 분할)

    • 엔터티의 일부 속성을 별도의 엔터티로 분할
    • 1:1 관계 성립
    • 자주 사용하는 속성이 아니거나 대부분의 인스턴스의 해당 속성값이 NULL 일 때 고려
    • 파티셔닝 기법을 주로 이용
  • 테이블 수평 분할(인스턴스 분할, 파티셔닝)

테이블 추가

  • 중복 테이블 추가: 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우
  • 통계 테이블 추가: 통계치를 미리 계산하여 저장하는 경우
  • 이력 테이블 추가: ex) 상품가격 이력 테이블에서 과거의 상품가격에 대한 데이터 관리
  • 부분 테이블 추가: ex) 회원 대상 메일 발송건이 다량으로 생기는 경우 메일 발송에 필요한 정보만 부분 테이블로 생성

컬럼 반정규화

  • 중복 컬럼 추가: JOIN 할 필요가 많아 컬럼을 추가하는 것이 성능 향상에 유리한 경우 고려
  • 파생 컬럼 추가: 부하가 염려되는 계산값을 미리 컬럼으로 추가
  • 이력 테이블 컬럼 추가: 대량의 이력 테이블을 조회할 때 속도 저하를 대비

관계 반정규화(중복 관계 추가)

  • JOIN 할 필요가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우

트랜잭션

트랜잭션: 데이터를 조작하기 위한 하나의 논리적인 작업 단위

트랜잭션의 특징

  • 원자성(Atomicity): 트랜잭션은 더 이상 분리가 불가능한 업무의 최소단위이므로, 전부 처리되거나 아예 하나도 처리되지 않아야 함
  • 일관성(Consistency): 하나의 트랜잭션이 완료된 후에도 데이터베이스는 여전히 일관된 상태여야 함
  • 고립성(Isolation): 실행 중인 트랜잭션의 중간 결과에 다른 트랜잭션이 접근할 수 없음
  • 지속성(Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 데이터베이스에 영속적으로 저장됨

NULL

NULL: 존재하지 않음

SQL 에서 NULL 이 처리되는 방식

  • 가로연산: NULL 이 포함되어 있으면 결과값은 NULL
  • 세로연산: 다른 인스턴스의 데이터와 연산할 때는 NULL 값을 제외

본질식별자 vs 인조식별자

본질식별자(Natural Identifier): 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자

인조식별자(Artificial Identifier): 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자
ex) 주문번호를 주문일자 + 순번 으로 만드는 것

참고자료
제1정규화, 제2정규화, 제3정규화: https://mjn5027.tistory.com/46

0개의 댓글