1) 정규화란?
2) 정규화 종류
ex)
| 이름 | 생년월일 | 직업 |
|---|---|---|
| 개코녀 | 19900802 | 배우,피아니스트,가수 |
-> 하나의 속성 직업에 여러 속성값을 사용하면 안됨
| 이름 | 생년월일 |
|---|---|
| 개코녀 | 19900802 |
-->겹치는 속성은 따로 빼내서 생성
| 이름 | 순번 | 직업 |
|---|---|---|
| 개코녀 | 1 | 배우 |
| 개코녀 | 2 | 피아니스트 |
| 개코녀 | 3 | 가수 |
ex)
| 이름 | 생년월일 | SNS1 | SNS2 | SMS3 |
|---|---|---|---|---|
| 개코녀 | 19900802 | 인스타그램 | 카카오톡 | 유튜브 |
-> 유사한 속성이 반복되어서도 안됨
| 이름 | 생년월일 |
|---|---|
| 개코녀 | 19900802 |
-->유사한 속성은 따로 빼내서 생성
| 이름 | SNS |
|---|---|
| 개코녀 | 인스타그램 |
| 개코녀 | 카카오톡 |
| 개코녀 | 유튜브 |
제2정규형 : 엔티티의 일반 속성은 주식별자 전체에 종속적이어야 한다.
결정자 -> 종속자(함수종속성)
ex)
[주문상세]
| 주문번호(PK) | 상품번호(PK) | 상품명 |
|---|---|---|
| 210001 | 156 | SQL전문가 가이드 |
| 210002 | 157 | 데이터아키텍처 전문가 가이드 |
| 210003 | 156 | SQL전문가 가이드 |
| 210004 | 156 | SQL전문가 가이드 |
| 210005 | 156 | SQL전문가 가이드 |
| 210006 | 158 | 데이터 분석 전문가 가이드 |
-> 상품명(일반속성)은 2개의 기본키 중 상품 번호에 함수 종속성을 가지고 있음. 즉 상품 번호에 의해서만 결정
[상품]
| 상품번호 | 상품명 |
|---|---|
| 156 | SQL 전문가 가이드 |
| 157 | 데이터아키텍처 전문가 가이드 |
| 158 | 데이터 분석 전문가 가이드 |
[주문 상세]
| 주문번호 | 상품번호 |
|---|---|
| 210001 | 156 |
| 210002 | 157 |
| 210003 | 156 |
| 210004 | 156 |
| 210005 | 156 |
| 210006 | 158 |
제3정규형 : 엔티티의 일반속성 간에는 서로 종속적이지 않는다.
제2정규형을 만족한다.
기본키를 제외한 속성들 간에 이행종속성은 없어야한다.
ex)
| 주문번호(PK) | 상품번호 | 상품명 |
|---|---|---|
| 210001 | 156 | SQL전문가 가이드 |
| 210002 | 157 | 데이터아키텍처 전문가 가이드 |
| 210003 | 156 | SQL전문가 가이드 |
| 210004 | 156 | SQL전문가 가이드 |
| 210005 | 156 | SQL전문가 가이드 |
| 210006 | 158 | 데이터 분석 전문가 가이드 |
--> 주문번호를 알면 상품번호를 알 수 있다 -> 상품번호를 알면 상품명을 알 수 있다.
--> 즉 주문번호를 알면 상품명을 알 수 있다.
1) 반정규화의 정의
2) 반정규화 기법
테이블 반정규화
| 분류 | 식별자 | 설명 |
|---|---|---|
| 테이블 병합 | 1:1 관계 태이블 병합 | 1:1 관계를 통합해 성능 향상 |
| 1:M관계 테이블 병합 | 1:M관계 통합해 성능 향상 | |
| 슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계를 통합 해 성능 향상 | |
| 테이블 분할 | 수직분할 | 컬럼 단위를 테이블을 디스크 i/o분산 처리 하기 위해 테이블을 1:1로 분리해 성능 향상 |
| 수평분할 | 로우 단위로 집중 발생되는 트랜잭션을 분석해 디스크 i/o 및 데이터 접근을 효율성을 높여 성능을 향상하기 위해 로우 단위로 테이블을 쪼갬 | |
| 테이블 추가 | 중복 테이블 추가 | 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거해 성능 향상 |
| 통계 테이블 추가 | SUM, AVG등을 미리 수행해 계산해 둠으로써 조회시 성능을 향상 | |
| 이력테이블 추가 | 이력테이블 중 마스터 테이블에 존재하는 레코드를 중복해 이력 테이블에 존재하는 방법은 반 정규화의 유형 | |
| 부분 테이블 추가 | 하나의 테이블의 전체 칼럼 중 자주 이용하는데, 자주이용하는 집중화된 칼럼들이 있을 때 디스크 i/o를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반 정규화된 테이블 생성 |
컬럼 반정규화
1) 성능저하 원인
하느이 테이블에 데이터 대량 집중 : 테이블 크기가 너무 커져서 효율성 떨어지고 디스크 i/o량 높아짐
하나의 테이블에 여러개의 컬럼 존재 : 디스크 점유랑 많아지고 데이터 읽는 i/o량 높아짐
대량의 데이터가 하나의 테이블에 존재 : 인텍스 크기가 커지고, 성능이 저하됨
컬럼이 많아지는 경우 : 로우 체이닝, 로우 마이그레이션 발생
2) 해결방안
한 테이블에 많은 칼럼 -> 수직분할
대량 데이터 저장 문제 -> 파티셔닝, PK에 의한 테이블 분할
대량 데이터 발생에 따른 테이블 분할
수직분할 : 컬럼 단위로 분할하여 I/O 경감
수평분할 : 로우 단위로 분할해 I/O 경감
3) 파티셔닝
테이블 수평 분할 기법(로우 단위), 논리적으로는 하나의 테이블 이지만 물리적으로는 여러 데이터 파일에 분산저장, 데이터 조회범위를 줄여 성능 향상시킴.
1) 데이터 베이스 성능 저하 원인 3가지
union 연산
조인
불필요하게 많은 데이터 집적
2) 슈퍼타입, 서브타입 데이터 모델 변환을 통한 성능 향상
변환 기준 : 데이터의 양, 트랜잭션 유형
데이터 소량 : 데이터 처리 유연성을 고려해 가급적 1:1 유지
데이터 대량 : 3가지 변환 방법(개별테이블, 슈퍼+서브타입 테이블, 하나의 테이블)
| 구분 | One to one | plus | single |
|---|---|---|---|
| 특징 | 개별테이블 유지 | 슈퍼+서브타입테이블 | 하나의 통합 테이블 |
| 확장성 | 우수 | 보통 | 나쁨 |
| 조인필요수 | 많음 | 보통 | 적음 |
| I/O 성능 저하 | 양호 | 양호 | 나쁨 |
| 관리용이성 | 나쁨 | 나쁨 | 좋음 |
=> 분리가 잘될수록
1) 분산 데이터베이스의 개념
물리적으로 분산된 데이터베이스를 하나의 논리적 시스템으로 사용
빠른 네트워크 환경을 이용해 데이터베이스를 여러 지역에서 노드로 위치시켜 사용성과 성능을 극대화 하는 데이터베이스
2) 분산데이터베이스의 장단점
| 정점 | 단점 |
|---|---|
| 지역 자치성 증가 | 소프트웨어 개발 비용 증가 |
| 점증적 시스템 용량 확장 가능 | 오류 잠재성 증대 |
| 신뢰성, 가용성, 효용성, 융통성 | 처리 비용 증대 |
| 빠른 응답 속도, 통신비용 절감 | 불규칙한 응답속도 |
| 용량 확장이 쉽다. | 통제 어려움 |
| 각 지역 사용자의 요구 수용 가능 | 데이터 무결성 유지 어려움 |
3) 분산 DB의 투명성
분할 투명성 : 하나의 논리적 관계가 분할 되어, 각 단편의 사본이 여러 사이트에 저장
위치 투명성 : 사용하려는 데이터 저장 장소가 명시되지 않아도 됨.
지역사상 투명성 : 지역 DBMS와 물리적 DB사이의 사상이 보장됨
중복 투명성 : DB객체 중복 여부 몰라도 됨
장애 투명성 : 구성요소(DBMS, 컴퓨터)의 장애에 무관하게 트랜잭션의 원자성이 유지됨
병행 투명성 : 다수의 트랜잭션을 동시에 수행했을 때 결과의 일관성 유지.