생각하는 감쟈
[SQLD] 1과목 1-2 ) 데이터 모델과 SQL / 정규화 비정규화 본문
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)
'Data' 카테고리의 다른 글
[알고리즘] 백 트래킹 알고리즘(back tracking), 빅 오 표기법(Big-O) (0) | 2023.11.15 |
---|---|
[알고리즘] 그래프 - 깊이 우선 탐색(dfs), 너비 우선 탐색(bfs) / 전체 탐색 - 브루트 포스 기법 정리 (0) | 2023.11.14 |
[알고리즘] 자료구조 (stack, queue, deque), Tree 정리 (2) | 2023.10.26 |
[SQLD] 2과목 2-1 ) SQL 기본 1 / SELECT 문, SQL 함수 (1) | 2023.08.24 |
[SQLD] 1과목 1-1 ) 데이터 모델링의 이해 (0) | 2023.08.15 |