정규화 (Normalization)
- 정규화
- 엔터티를 작은 단위로 분리하는 과정
- 입력, 수정, 삭제 성능 일반적으로 향상됨
- 데이터의 무결성을 보장하기 위해 수행
- 제1정규형
- 제2정규형
- 모든 일반속성이 반드시 모든 주식별자에 종속되어야 함
- 제2정규화 - 주식별자가 복합식별자인 경우 부분 종속을 없애야 함
- 제2정규화 - 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 뺌
- 제3정규형
- 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없음
- 제3정규화 - 일반속성에만 종속된 속성은 다른 테이블로 뺌
- 제3정규형을 만족하는 엔티티의 일반 속성은 주식별자 전체에 종속적임
✅ 어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속이 아닐 때 제3정규형에 속한다.
✅ 정규화는 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 인스턴스에 배치되도록 한다.
→ 개념 데이터 모델 아님!!!! 논리 데이터 모델!!!!!!!!
반정규화 (De-Normalization)
- 반정규화
- 조회 성능 향상을 위해 데이터 중복 허용 / 데이터 그룹핑
- 입력, 수정, 삭제 성능은 저하될수도
- 정규화가 끝난 후에
- 테이블 병합
- 1:1 / 1:M / 슈퍼 서브 타입
- JOIN이 많을 경우 고려
- 1:M 테이블 병합 - 1쪽 엔티티 속성 개수가 적은 경우에만
- 테이블 분할
- 테이블 수직 분할
- 일부 속성을 별도의 엔터티로. 1:1 관계 성립
- 자주 사용 X거나 대부분의 속성값이 NULL일 경우 고려

- 테이블 수평 분할
- 인스턴스를 특정 기준으로 분할
- 파티셔닝

- 테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
- 컬럼 반정규화
- 중복 컬럼 추가
- 파생 컬럼 추가
- 이력 테이블 컬럼 추가
트랜잭션 (Transaction)
- 트랜잭션
- 데이터를 조작하기 위한 하나의 논리적인 작업 단위
- 트랜잭션의 특징
- 원자성
- 전부 처리되거나 아예 하나도 처리되지 않아야 함
- 일관성
- 고립성
- 지속성
✅ 순차적으로 수행되는 작업 A와 B가 원자성을 지닐 경우
A까지만 수행하고 오류 발생했다면 A를 undo해야 함
NULL
- ✅ NULL과의 비교 연산 결과는 항상 Unknown (IS NULL 제외)
- SUM,COUNT, AVG 등 집계함수는 NULL 제외하고 연산
✅ WHERE COL IS NULL과 WHERE COL = NULL은 다름!!!
✅ NULL = NULL 연산의 결과는 FALSE 또는 Unknown
본질식별자 vs 인조식별자
- 인조식별자
- PK 속성이 두 개 이상인 경우 하나로 묶어서 사용하는 식별자
- 복합식별자인 경우 간결하게 대체하기 위해 인조식별자 생성 가능
✅ 인조식별자 사용시 중복 데이터 막기 어려워짐
출처