SQL #8

데이터 모델과 SQL

정규화란?

데이터에 대한 중복을 제거하고 데이터가 관심사별로 처리되도록 엔터티를 나눠서 성능을 향상 시키는 활동. (단, 정규화가 대체적으로 좋은 것이며 경우에 따라서는 반정규화가 더 이득일 수도 있다.)

더보기

정규화시 입력/삭제/수정(DML)은 성능 향상! 조회는 성능 향상 혹은 저하 될 수 있다!

 

함수적 종속이란? F(X) = Y

정규화를 하기 위해 알아야 하는 개념으로, 어떤 기준 값(컬럼)에 의해 데이터가 종속되는 현상을 의미한다.

더보기

예시. 결정자(아이디) -> 종속자(이름, 나이, 연봉, 부서, 부서명) : 아이디가 나머지 모든 컬럼을 함수종속한다.
예시. 결정자(부서) -> 종속자(부서명) : 부서가 부서명 컬럼을 함수종속한다.

 

정규화 과정 상세히 알아보기

etc-image-0

  • ?차 정규화를 거쳐 ?차 정규형이 된다!
  • 도메인원자성 : 1차 정규화 / NF : Normal Form /  BCNF : 보이스코드정규형 

 

정규화 (1차 정규화)

  • 비정규형 - 정규형(1NF)
  • 비정규형 : 중복값 or 중복속성이 있는 경우

엔터티에서 다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값으로 쪼개준다.

  • 도메인원자성 : 속성 입력 값의 범위 중 속성값이 1개(`,` 불가) 따라서 따로 분리!
    ex. 주소1 주소2 주소3 과 같이 주소값이 여러 개라서 속성을 여러 개 만드는 것 또한 1차 정규화 대상이다!

 

정규화 (2차 정규화)

2차 정규화는 [1정규형 -> 2정규형(NF)] 형태로 엔터티를 변경하는 활동이다.

더보기

1차 정규형에서 3차 정규형으로 바로 갈 수는 없다.

1차 정규형은 무조건 2차 정규화를 거쳐 2차 정규형이 된다. (순서가 존재!)

  • 부분 종속 제거: 식별자에 부분 종속하는 대상을 쪼개어 준다. 즉, 결정자 전부에 나머지 컬럼이 완전 종속하지 않고, 결정자 부분적으로도 종속한다면 쪼개야 한다.
  • 2차 정규화 푸는 팁
  1. 위에서 부분적 종속한다고 하는 것들을 따로 뜯어낸다. (결정자는 `주식별자`로)
  2. 기존의 엔터티에서 주식별자가 가져간 일반속성을 제외하고 입력한다.
  3. 기존의 데이터를 파악하여 관계를 설정한다.

 

정규화 (3차 정규화)

엔터티에서 일반속성끼리 함수종속이 발생하면 쪼개준다.

  • 이행종속제거: 일반 속성끼리 함수 종속이 일어날 경우를 이행 종속이라 한다. 따라서 이를 쪼개줘야 한다. (방식은 2차 정규화에서 했던 방식과 동일)

 

반정규화(=역정규화)

정규화한 데이터를 다시 합쳐서 중복되게 하거나 통합, 분리 등을 수행하는 모델링 방식.

  1. 테이블 반정규화 (테이블 병합, 테이블 분할, 테이블 추가 등)
  2. 컬럼 반정규화 (중복 컬럼, 파생 컬럼, 이력테이블 컬럼 추가 등)
  3. 관계 반정규화 (중복관계 추가)

 

정규화 VS 반정규화 ?

정규화/반정규화 -> 성능 향상을 위해 실행한다. 하지만 간혹 데이터를 조회할 시 반정규화 테이블에서 데이터를 조회하는 것이 더 빠른 경우가 있다. (조회 시 대개 정규화가 좋지만, 반정규화가 좋을 경우도 있다. = 무조건 정규화가 좋은 것이 아니다!) 단, 입력 / 수정 / 삭제 시에는 무조건 정규화가 좋다.

 

반정규화 대상 조사 방법

더보기

반정규화는 데이터의 무결정을 깨뜨릴 위험이 있다. 그래서 가급적이면 다른 방법을 생각해보고 안 되겠다 싶으면 반정규화를 한다.

  1. 반정규화가 필요한 대상을 찾는다.
  2. 다른 방법이 없는지 검토한다.
  3. 달리 방법이 없다면 반정규화를 적용한다.
더보기

테이블 반정규화 (테이블병합, 테이블분할, 테이블추가 등)
컬럼 반정규화 (중복컬럼, 파생컬럼, 이력테이블 컬럼, PK에 의한 컬럼 추가 등)
관계 반정규화 (중복관계 추가)

 

컬럼 반정규화

중복컬럼 추가 - 테이블에 중복되는 컬럼을 추가해 조인을 감소시킨다.

ex. 만약 직원의 연락처가 변경되었을 때, 직원연락처 엔터티 내 연락처는 수정했지만 직원 엔터티 내 연락처를 수정하지 않으면 두 데이터가 달라진다. 이를 데이터의 무결성이 깨졌다라고 한다.

 

조인이란?

식별자를 상속해 이를 이용하여 데이터를 결합해 여러 엔터티에서 필요한 데이터를 한 번에 가져오는 것.

 

계층형 데이터모델이란?

계층구조를 가진 데이터를 저장한 모델 자기 자신의 엔터티와 관계가 발생하는 경우. 엔터티 내에 속성끼리 관계가 있어서 자기 자신으로 돌아오는 ERD가 그려진다.

 

상호배타적 관계란?

A와 B가 C집단에 소속되었지만, 서로 공통적인 부분이 없는 관계. 설계도의 [ 을 보고 상호배타적 관계구나 라는 걸 이해해야 한다.

 

 

 

 

 

 

 

 

etc-image-1

 

 

https://www.youtube.com/watch?v=NrbGR_HiN-Y&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=4/

'SQL' 카테고리의 다른 글

SQL #10  (0) 2025.01.20
SQL #9  (0) 2025.01.20
SQL #7  (4) 2024.11.28
SQL #6  (0) 2024.11.28
SQL #5  (1) 2024.11.26