생각하는 감쟈

[SQLD] 1과목 1-2 ) 데이터 모델과 SQL / 정규화 비정규화 본문

Data

[SQLD] 1과목 1-2 ) 데이터 모델과 SQL / 정규화 비정규화

생각하는 감쟈🥔 2023. 8. 18. 04:50

 1. 정규화 (Normalization) 

정규화 ?

  - 데이터 정합성을 위해 엔터티를 작은 단위로 분리하는 과정

  - 정규화를 하면 불필요한 데이터를 입력하지 않기 때문에 중복 데이터가 제거 됨

  - 모든 엔터티를 정규화하는 건 아님 

  - 정규화를 할수록 엔터티 증가 데이터 입력, 수정, 삭제 성능이 향상 됨

 

1) 제 1정규화

  - 모든 속성은 반드시 하나의 값만 갖도록 데이블 분해

  - 속성의 우너자성을 확보후 속성의 중복값을 제거 함

  - 기본키를 설정

2) 제 2정규화

  - 엔터티의 모든 일반속성을 반드시 모든 주식별자에 종속되어야 함

  - 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(기본키가 1개면 안함)

  - 복합 인스턴스에 대한 각 인스턴스의 종속적 중복을 삭제

3) 제 3정규화

  - 기본키를 제외한 칼럼 간에 종속성을 제거 (2정규화에서 테이블에 대한 이행적 종속을 없애도록 테이블을 분해)

  - 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다

4) 주의사항

  - 지나친 정규화는 성능 저하

  - 여러번 join이 필요한 경우, 반정규화를 통해 성능 개서느

 


 2. 반정규화 (De-Normalization) 

반정규화?

  - 데이터 성능을 향상시키기 위해 데이터의 중족을 허용하서나 데이터를 그룹핑하는 과정

 

1) 테이블 반정규화

테이블 병합 1:1 관계 테이블 병합
1:M 관계 테이블 병합
슈포 서브 타입 테이블 병합
테이블 분할 테이블 수직 분할(속성 분할)
테이블 수평분할 (인스턴스 분할, 파티셔닝)
테이블 추가 중복 테이블 추가
통계 테이블 추가
이력 테이블 추가
부분 테이블 추가

 

2) 컬럼 반정규화

  중복 컬럼 추가

      -  업무 프로세스 상 JOIN이 필여한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려

  파생 컬럼 추가

      - 프로세스 수행 시 염려되는 값을 미리 컬럼으로 추가하여 보관하는 방식

  이력 테이블 컬럼 추가

      - 대량 데이블 조회할 때 속도가 느려질 것을 대비하여 조회 기분이 될 것으로 판단되는 컬럼을 미리 추가

 

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

  - 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려 


 3. 트랙잭션(Transaction) / NULL 

1) 트랙잭션

  - 데이터를 조작하기 위한 하나의 논리적인 작업 단위

 

2) NULL이란 ?

  - 존재하지 않음, 즉 값이 없음

    SQL에서 NULL

      - 가로연산 : NULL값이 포함되어 있으면 결과 값은 NULL

      - 세로연산 : 다른 인스턴스이 데이터와 연산할 떄는 NULL값을 제외

 

EX)

 

 

Comments