정규화(Normalization)
- 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장) 을 위해 엔티티의 작은 단위로 분리하는 과정이다.
- 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고, 저하되는 경우도 있지만
입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다.
그렇다고 모든 엔티티를 무작정 분리하면 안 되기 때문에 정규화를 하기 위한 일정한 룰이 존재한다.
(1) 제 1 정규화
- 모든 속성은 반드시 하나의 값만 가져야 한다.
(2) 제 2 정규형
- 엔티티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다.
주 식별자가 단일 식별자가 아닌 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속되면 안된다.
(3) 제 3 정규형
- 주식멸자가 아닌 모든 속성간에는 서로 종속될 수 없다.
(4) 주의사항
- 정규화는 성능상 이롭지만 지나친 정규화는 오히려 성능 저하를 일으킬 수 있다.
반정규화
- 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다.
- 조회성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다.
- 반정규화의 과정은 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 룰이 존대한다
(1) 테이블 반정규화
테이블 병합
- 1:1 관계 테이블 병합
- 1 : M 관계 테이블 병합
- 슈퍼 서브 타입 테이블 병합
테이블 분할
- 테이블 수직 분할(속성분할)
- 테이블 수평 분할(인스턴스 분할, 파티셔닝)
테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
1) 테이블 병합
- 업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 셩우 고려한다.
1:M 관계 테이블 병합의 경우 1쪽에 해당되는 엔티티의 속성 개수가 많으면 병합했을 경우 중복 데이터가 많아지므로 테이블 병합에 적절하지 못한다.
2) 테이블 분할
- 테이블 수직 분할 : 엔티티의 일부 속성을 별도의 엔티티로 분할 1:1 관계 성립한다.
- 테이블 수평 분할 : 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할(파티셔닝) 한다.
3) 테이블 추가
- 중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우
별도의 엔티티를 추가한다.
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
(2) 컬럼 반정규화
1) 중복 컬럼 추가
- 업무 프로세스 상 JOIN이 필요한 경우가 많이 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려
2) 파생컬럼 추가
- 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식으로 상품의 재고나 프로모션 적용 할인가 등이 이에 해당할 수 있다.
3) 이력 테이블 컬럼 추가
- 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식이다. 최신 데이터 여부 등이 이에 해당할 수 있다.
(3) 관계 반정규화(중복 관계 추가)
- 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.
트랜잭션(Transaction)
- 데이터를 조작하기 위한 하나의 논리적인 작업단위이다.
NULL
(1) NULL이란?
- NULL은 존재하지 않음, 즉 값이 없음을 의미한다.
가로연산 : NULL이 포함되어 있으면 결과값은 NULL이 된다.
세로연산 : 다른 인스턴스의 데이터와 연산할때는 NULL값을 제외한다.
'자격증 > SQLD' 카테고리의 다른 글
SQL 기본 및 활용 - SQL기본 - 함수 / 문자함수 (0) | 2024.02.26 |
---|---|
SQL 기본 및 활용 - SQL 기본 - 관계형 데이터베이스 개요 / SELECT 문 (2) | 2024.02.24 |
데이터 모델링의 이해 - 관계 / 식별자 (0) | 2024.02.22 |
데이터 모델링의 이해 - 엔티티 / 속성 (0) | 2024.02.21 |
데이터 모델링의 이해 - 데이터 모델의 이해 (0) | 2024.02.20 |