[SQLD]「1」(1.2) 정규화, 반정규화, 트랜잭션, NULL

728x90

[SQLD]1」(1.2) 정규화, 반정규화, 트랜잭션, NULL

> 「1」 데이터 모델링의 이해

「2」 SQL 기본 / 활용

「3」 관리 구문

 

> 1. 정규화

> 2. 반정규화

> 3. 트랜잭션

> 4. NULL

 

1. 정규화

정규화

데이터의 정합성을 위해 중복을 제거하여 엔티티를 분리하는 과정

데이터 입력 / 수정 / 삭제 성능을 향상함

⸰ 지나친 정규화는 오히려 성능 저하

 

제 1정규형

모든 속성값은 하나의 값만 가져야 함

⸰ 유사한 속성이 반복되지 않아야 함

 

제 2정규형

⸰ 모든 일반속성은 모든 주식별자에 종속되어, 부분 종속이 없어야 함

 

제 3정규형

주식별자를 제외한 모든 속성 간 종속이 없어야 함

 

2. 반정규화

반정규화

⸰ 데이터의 조회 성능을 향상하기 위해 중복을 허용하여 의도적으로 정규화에 위배되는 행위

⸰ 조회 성능 향상하고, 데이터 입력 / 수정 / 삭제 성능 저하

⸰ 정규화가 끝난 뒤 반정규화 실행

 

테이블 반정규화

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

⸰ 테이블 병합

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

  - 1 : M 관계 테이블 병합의 경우, 엔티티 속성 개수가 많으면 중복 데이터 많아지므로 적절하지 않음

⸰ 테이블 분할

  -테이블 수직 분할

    : 일부 속성을 별도의 엔티티로 분할(1 : 1 관계 성립)

    : 자주 사용하는 속성 아니거나, 대부분의 인스턴스가 NULL일 경우 고려  

  -테이블 수평 분할

    : 특정 기준이나 다른 속성으로 별도의 엔티티로 분할(파티셔닝)

⸰ 테이블 추가

  -중복 테이블 추가: 중복을 감안하여 성능 향상이 반드시 필요한 경우 별도의 엔티티 추가

  -통계 테이블 추가: 통계치를 미리 계산하여 추가

  -이력 테이블 추가: 과거의 데이터를 관리하여 추가

  -부분 테이블 추가: 필요한 부분만 엔티티로 생성

 

칼럼 반정규화

⸰ 중복 칼럼 추가

  - JOIN이 필요한 경우가 많아 칼럼을 추가하는 것이 성능 측면에서 유리할 경우

파생 칼럼 추가

  - 프로세스 수행 시 부하가 염려되는 계산값을 미리 칼럼으로 추가

⸰ 이력 테이블 칼럼 추가

  - 대량의 이력 테이블을 조회할 때 조회 기준이 될 칼럼을 미리 추가

 

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

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

 

3. 트랜잭션

트랜잭션

⸰ 데이터를 조작하기 위한 하나의 논리적인 작업 단위, 데이터 모델로 표현 가능

 

4. NULL

NULL

⸰ 존재하지 않음, 값이 없음

⸰ NULL이 포함된 비교 연산의 결과값은 NULL

⸰ NULL이 포함된 집계 함수는 NULL을 제외하고 계산

 

 

 

 

 

 

 

 

 

 

 

유선배 SQLD 과외노트

728x90