[SQLD]「1」(1.2) 정규화, 반정규화, 트랜잭션, NULL
> 「1」 데이터 모델링의 이해
「2」 SQL 기본 / 활용
「3」 관리 구문
> 1. 정규화
> 2. 반정규화
> 3. 트랜잭션
> 4. NULL
1. 정규화
정규화
⸰ 데이터의 정합성을 위해 중복을 제거하여 엔티티를 분리하는 과정
⸰ 데이터 입력 / 수정 / 삭제 성능을 향상함
⸰ 지나친 정규화는 오히려 성능 저하
제 1정규형
⸰ 모든 속성값은 하나의 값만 가져야 함
⸰ 유사한 속성이 반복되지 않아야 함
제 2정규형
⸰ 모든 일반속성은 모든 주식별자에 종속되어, 부분 종속이 없어야 함
제 3정규형
⸰ 주식별자를 제외한 모든 속성 간 종속이 없어야 함
2. 반정규화
반정규화
⸰ 데이터의 조회 성능을 향상하기 위해 중복을 허용하여 의도적으로 정규화에 위배되는 행위
⸰ 조회 성능 향상하고, 데이터 입력 / 수정 / 삭제 성능 저하
⸰ 정규화가 끝난 뒤 반정규화 실행
테이블 반정규화
테이블 병합 | 1 : 1 관계 테이블 병합 |
1 : M 관계 테이블 병합 | |
슈퍼 서브 타입 테이블 병합 | |
테이블 분할 | 테이블 수직 분할(속성 분할) |
테이블 수평 분할(인스턴스 분할, 파티셔닝) | |
테이블 추가 | 중복 테이블 추가 |
통계 테이블 추가 | |
이력 테이블 추가 | |
부분 테이블 추가 |
⸰ 테이블 병합
- JION이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우
- 1 : M 관계 테이블 병합의 경우, 엔티티 속성 개수가 많으면 중복 데이터 많아지므로 적절하지 않음
⸰ 테이블 분할
-테이블 수직 분할
: 일부 속성을 별도의 엔티티로 분할(1 : 1 관계 성립)
: 자주 사용하는 속성 아니거나, 대부분의 인스턴스가 NULL일 경우 고려
-테이블 수평 분할
: 특정 기준이나 다른 속성으로 별도의 엔티티로 분할(파티셔닝)
⸰ 테이블 추가
-중복 테이블 추가
: 중복을 감안하여 성능 향상이 반드시 필요한 경우 별도의 엔티티 추가
-통계 테이블 추가
: 통계치를 미리 계산하여 추가
-이력 테이블 추가
: 과거의 데이터를 관리하여 추가
-부분 테이블 추가
: 필요한 부분만 엔티티로 생성
칼럼 반정규화
⸰ 중복 칼럼 추가
- JOIN이 필요한 경우가 많아 칼럼을 추가하는 것이 성능 측면에서 유리할 경우
⸰ 파생 칼럼 추가
- 프로세스 수행 시 부하가 염려되는 계산값을 미리 칼럼으로 추가
⸰ 이력 테이블 칼럼 추가
- 대량의 이력 테이블을 조회할 때 조회 기준이 될 칼럼을 미리 추가
관계 반정규화(중복 관계 추가)
⸰ JION이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우
3. 트랜잭션
트랜잭션
⸰ 데이터를 조작하기 위한 하나의 논리적인 작업 단위, 데이터 모델로 표현 가능
4. NULL
NULL
⸰ 존재하지 않음, 값이 없음
⸰ NULL이 포함된 비교 연산의 결과값은 NULL
⸰ NULL이 포함된 집계 함수는 NULL을 제외하고 계산
유선배 SQLD 과외노트
'💠기타 > 자격증' 카테고리의 다른 글
[SQLD]「2」(2.2) WHERE 절, GROUP BY 절/HAVING 절, ORDER BY 절 (0) | 2024.06.17 |
---|---|
[SQLD]「2」(2.1) SELECT 문, 다양한 함수 (0) | 2024.05.31 |
[SQLD]「1」(1.1) 데이터 모델, 엔티티, 속성, 관계, 식별자 (0) | 2024.05.08 |
[정처기 실기] 「6」 신기술 용어 - (6.1) 신기술 용어 (1) | 2024.04.03 |
[정처기 실기] 「5」 정보보안 - (5.2) 정보보안(2) (2) | 2024.04.03 |