정규화(Normalization)
데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정이다. 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고 저하되는 경우도 있지만 입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다. 하지만 그렇다고 모든 엔터티를 무작정 분리하면 안 되기 때문에 정규화를 하기 위한 일정한 룰이 존재한다.
제1 정규형
모든 속성은 반드시 하나의 값만 가져야 한다. 유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다.
제2 정규형
엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 주식별자가 단일식별자가 아닌 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속될 수 있다.
제3 정규형
주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
주의사항
적절한 정규화는 성능상 이롭지만 지나친 정규화는 오히려 성능 저하를 일으킬 수 있다.
반정규화(De-Normalization)
데이터의 조회 성능을 향상하기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다. 여기서 주의해야 할 점은 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다는 점이다. 반정규화 과정은 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 룰이 존재한다.
테이블 반정규화
| 테이블 병합 | 1:1 관계 테이블 병합 |
| 1:M 관계 테이블 병합 | |
| 슈퍼 서브 타입 테이블 병합 | |
| 테이블 분할 | 테이블 수직 분할(속성 분할) |
| 테이블 수평 분할(인스터스 분할, 파티셔닝) | |
| 테이블 추가 | 중복 테이블 추가 |
| 통계 테이블 추가 | |
| 이력 테이블 추가 | |
| 부분 테이블 추가 |
칼럼 반정규화
· 중복 컬럼 추가
업무 프로세스상 조인이 필요한 경우가 많아 칼럼을 추가하는 것이 성능 측면에서 유리할 경우 고려
· 파생 컬럼 추가
프로세스 수행 시 부하가 염려되는 계산값을 미리 칼럼으로 추가하여 보관하는 방식. 상품의 재고나 프로모션 적용 할인가 등이 이에 해당할 수 있다.
· 이력 테이블 컬럼 추가
대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식. 최신 데이터 여부 등이 이에 해당할 수 있다.
관계 반정규화(중복관계 추가)
업무 프로세스상 조인이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.
트랜잭션(Transaction)
데이터를 조작하기 위한 하나의 논리적인 작업 단위이다. 예를 들어 온라인에서 퀴즈의 정답을 맞히면 쿠폰을 즉시 발행해 주는 이벤트를 하고 있다고 가정해 보자. 쿠폰은 선착순 100명에게만 지급된다. 이 경우 다음 작업은 논리적으로 하나의 단위로 묶여야 한다.
- 이벤트 응모 이력을 저장한다.
- 쿠폰을 발행한다.
만약 퀴즈의 정답을 맞혀서 이벤트 응모 이력을 정상적으로 저장했으나 그 순간 선착순 100개의 쿠폰이 모두 소진되었다고 했을 때 쿠폰 발행은 실패하게 되고 이벤트 응모 이력 또한 롤백되어야 바람직한 시스템이라고 볼 수 있다.
NULL
존재하지 않음, 즉 값이 없음을 의미. 가로 연산, 세로 연산에 NULL 값이 존재할 경우 결과는 NULL이 된다. 하지만 NULL이 포함된 집계함수는 NULL을 제외하고서 계산된다.
'Database > SQL 개발자' 카테고리의 다른 글
| 노랭이 이론 1~33 (11) | 2024.09.23 |
|---|---|
| [SQL] 관리 구문 (1) | 2024.09.12 |
| [SQL] SQL 활용 (0) | 2024.09.11 |
| [SQL] SQL 기본 (4) | 2024.09.11 |
| [SQL] 데이터 모델링의 이해 (1) | 2024.09.10 |