SQLD

(1과목) 데이터 모델과 SQL

Zoo_10th 2024. 4. 18.

1. 정규화(Normalization)

데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정이다. 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고 저하되는 경우도 있지만 입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다. 그렇다고 모든 엔터티를 무작정 분리하면 안되기 때문에 정규화를 하기 위한 규칙이 존재한다.

1-1. 제1정규형

모든 속성은 반드시 하나의  값만 가져야 한다. 유사한 속성이 반복되는 경우도 1차 정규화 대상이 된다. 

1) 이상현상 

- 삽입 이상 : 학생이 새 수업을 수강 신청할 때 반드시 학생의 수업과 지도교수를 알아야 한다. (불필요한 정보)

- 삭제 이상 : 1345번 황진이 학생이 실용음악과 학과를 취소하면, 해당 수업에 대한 정보가 모두 사라진다. 

- 갱신 이상 : 1234번 홍길동 학생이 교수를 변경할 때, 허균인 행을 모두 찾아서 변경해주어야 한다. 

2) 이상형상 발생 이유

기본키(primary key)가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있기 때문이다. 즉, 기본키의 일부 속성에만 의존하고 있기 때문이다.

1-2. 제2정규형

엔테티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 주식별자가 단일 식별자가 아닌 복합식별자인 경우 일반 속성이 주식별자의 일부에만 종속될 수 있는데 이런 경우 문제점이 발생한다.

각 속성들이 모두 완전 함수 종속이 되도록 릴레이션을 분리시켜준다. 

1) 이상현상

- 삽입 이상 : 교수가 학과에 소속되어 있음을 추가할 때 반드시 학생이 있어야 한다. (불필요한 정보 필요)
- 삭제 이상 : 1456번 심청이 학생이 자퇴하는 경우 심학규 교수의 해양스포츠학과 정보가 사라진다. 
- 갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 한다. (지도교수가 동일한 학생이 여러 명 있는 경우)

2) 이상형상 발생 이유

 이상현상이 여전히 발생하는 이유는 '이행적 함수 종속성' 때문이다. 이행적 함수 종속성은 속성이 A→B이고, B→C이면서 A→C의 관계에 있는 것을 말한다.

1-3. 제3정규형

제3 정규형은 제2 정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다. 즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제3 정규형이라고 한다. 다르게 표현하면, 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것이다. 

2. 반정규화(De-Normalization)

데이터의 조회 성능을 향상시키기 위해 데이터 중복을 허용하거나 데이터를 그룹핑하는 과정이다. 주의할 점은 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며, 데이터 합성 이슈가 발생할 수 있는 점이다. 

2-1. 테이블 반정규화

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

1) 테이블 병합

업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리한 경우 고려한다. 1:M 관계 테이블 병합의 경우 1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합했을 경우 중복 데이터가 많아지므로 테이블 병합에 적절하지 못하다.

2) 테이블 분할

 - 테이블 수직 분할 : 엔터티의 일부 속성을 별도의 엔터티로 분할(1:1 관계가 성립해야 한다.)한다.
 - 테이블 수평 분할 : 엔터티의 인스턴스를 특정 기준(년도, 월)으로 별도의 엔터티로 분할(파티셔닝)한다.

3) 테이블 추가

 - 중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티를 추가한다.

 2-2. 컬럼 반정규화

1) 중복 컬럼 추가

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

2) 파생 컬럼 추가

프로세스 수행시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식으로 상품의 재고나 프로모션 적용할인가 등이 이에 해당할 수 있다.

3) 이력 테이블 컬럼 추가

대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식이다. 최신 데이터 여부 등이 해당할 수 있다.

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

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

3. 트랜잭션(Transaction)

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

728x90

'SQLD' 카테고리의 다른 글

(1과목) 데이터 모델링의 이해  (0) 2024.04.16

댓글