데이터 정규화
데이터 정합성 위해 엔터티 작은 단위로 분리하는 과정
- 데이터 입력, 수정, 삭제 성능 향상
- 데이터 조회 성능 저하 가능성 존재
제 1 정규형
- 다중값 속성 제거
- → 모든 속성이 단일값만 가짐
제 2 정규형
- 주식별자가 복합식별자인 경우 (속성들의 집합이 주식별자를 이루는 경우)
- 부분적 함수 종속 제거
- 부분적 함수 종속
- → 일반속성이 주식별자의 일부에만 종속되는 경우
제 3 정규형
- 이행적 함수 종속 제거
- 이행적 함수 종속
- → 주식별자가 아닌 속성간의 종속 관계
주의 사항
- 정규화 결과 JOIN 연산 증가로 인한 성능 저하 발생 가능
- → 반정규화 통해 성능 개선 가능
반정규화
데이터 조회 성능 향상 위해 데이터 중복 허용 또는 데이터 그룹핑하는 과정
- 데이터 조회 성능 향상
- 데이터 입력, 수정, 삭제 성능 저하 가능성 존재
- 데이터 정합성 문제 발생 가능
- 반정규화 과정은 정규화가 모두 끝난 후 진행
테이블 반정규화
- 테이블 병합
- 1:1 관계 테이블 병합
- 1:m 관계 테이블 병합
- 중복 데이터 생길 수 있음
- 슈퍼 서브 타입 테이블 병합
- → JOIN 연산 필요한 경우 많아 테이블 통합이 성능 측면에서 유리한 경우
- 테이블 분할
- 테이블 수직 분할
- 엔터티의 일부 속성 별도의 엔터티로 분할
- 자주 사용하지 않거나 속성값의 대부분 NULL값인 경우 고려
- 테이블 수평 분할
- 인스턴스를 기준에 따라 파티셔닝
- 데이터를 물리적으로 분리함
- 테이블 수직 분할
- 테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
- 일부 정보만 자주 사용되는 경우 사용
컬럼 반정규화
- 중복 컬럼 추가
- 파생 컬럼 추가
- 이력 테이블 컬럼 추가
관계 반정규화
- 중복 관계 추가해 성능 향상
- JOIN 연산 많이 필요한 경우 사용
트랜잭션
데이터 조작 위한 하나의 논리적 작업 단위
- 분리될 수 없는 작업 단위
💡특성
Atomicity, 원자성
- all or nothing
- 트랜잭션에 속한 모든 연산이 모두 실행 또는 하나도 실행되지 않아야함
- 연산들의 부분적 실행 허용되지 않음
- 연산이 분리될 수 없음
- 트랜잭션 수행 도중 장애 발생 → 모든 연산 수행 완료 불가
- 장애 발생 전 실행된 모든 연산 결과 취소
- DB를 트랜잭션 수행 이전으로 되돌림
Consistency, 일관성
- 트랜잭션의 수행 후에도 DB가 일관된 상태 유지
- 일관된 상태 - 데이터베이스에 오류 없는 상태, 내용에 모순 없는 상태
Isolation, 격리성
- 수행중인 트랜잭션이 완료될 때까지 다른 트랜잭션이 중간 결과에 접근 불가
- 여러 트랜잭션 동시 실행되어도 순차 실행된 결과와 동일해야함
- 트랜잭션 수행 순서 관계 없이 동일한 결과 반영
Durability, 지속성
- 트랜잭션의 완료 후 DB에 반영한 결과는 영구적
NULL
값이 존재하지 않음
- 0과 같지 않음
- 데이터가 입력되지 않은 상태
연산
- 가로 연산 (한 인스턴스 내 연산)
- NULL값 포함된 속성 있는 경우 결과값 NULL
- 세로 연산 (다른 인스턴스와 연산)
- NULL값 제외 후 연산
'DB > SQLD' 카테고리의 다른 글
[SQLD] 데이터 모델링이란? (1) | 2024.01.09 |
---|