본문 바로가기
Develope_MySQL

[SQLD] SQL D 정리 - 데이터 모델링의 이해 -2

by 스타트업_디벨로퍼 2021. 2. 8.

001 정규화

1 정규화(Normalization)

  • 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법 → 데이터를 분해하는 과정

  • 데이터 중복을 제거하고 데이터 모델의 독립성으 확보하기 위한 방법

  • 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화함

  • 실질적으로는 제3정규화까지만 수행함.

  • 이상현상을 해결하기 위해서 테이블을 분해하고 , 조인을 통해 합집하을 하기도 한다.

  • 정규화 절차

  1. 제1정규화 : 속성의 원자성을 확보 / 기본키를 설정함
  2. 제2 정규화 : 부분 함수 종속성을 제거한다.
  3. 제3 정규화 : 칼럽간에 종속성을 제거한다. (이행 함수 종속성 제거)
  4. BCNF : 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
  5. 제4 정규화 : 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해아여 다중값 종속성을 제거
  6. 제5 정규화 : 조인에 의해서 종속성이 발생되는 경우 분해

2 함수적 종속성(Functional Dependency)

(1) 제1정규화

  • 함수적 종속성을 근거로 한다. X→ Y 이면Y는 X에 함수적으로 종속됨.
  • X가 변화하면 Y도 변화하는 지 확인함.
  • 게좌번호 하나만으로 유일성을 만족하지 못하면, 계좌번호와 회원ID를 기본키로 잡음

(2) 제2정규화

  • X : 계좌번호 / 회원 ID
  • Y : 계좌명, 예수금, 이름, 관리점 코드, 관리점

→ 회원ID가 이름에 함수적으로 종속(부분 함수 종속성) → 분해를 해야한다!

(3) 제3정규화

  • 관리점 코드가 관리점을 종속하여 (이행 함수 종ㅅ옥성) 이를 분리함

(4) BCNF(Boyce-Codd Normal Form)

  • 복수의 후보키가 있고 후보키들이 복합 속성이어야 하면, 서로 중첩될 때
  • ex) 기본 키 : 학번, 과목 번호 → 교수(후보키, 최소성과 율성을 만족)
  • 교수가 과목 번호를 함수적으로 종속 → 교수 테이블을 새로 만들고 기본키는 교수로 하고 칼럼은 과목 번호가 됨 → BCNF

3 정규화 예제

  • 정규화 대상 테이블

(1) 제1정규화

  • 속성을 보고 한 개의 속성으로 유일성을 만족할 수 있는지 확인(중복 체크)
  • 한 개의 속성으로는 유일성 만족할 수 없다면 2개의 조합으로 체크 → 유일성 만족하는 것이 식별자가 됨

(2) 제2정규화

  • 기본키가 두개인 경우 대상됨. 모든 속성이 식별자에 종속되어야 함. 그렇지 않을 경우 분해함.
  • 중복이 나오는 경우 엔티티를 분해하는 것 이 제 2정규화
  • 이를 통해서 엔티티가 분리된다.

002 정규화와 성능

1 정규화의 문제점

  • 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높이나, 데이터 조회(SELECT) 시에 JOIN을 유발하기 떄문에 메모리를 많이 사용함. 두개의 테이블을 가진 경우 조인해야 함.

  • 조인의 사용

SELECT 사원번호, 부서코드, 부서명, 이름 ,전화번호, 주소 FROM 직원, 부서 WHERER 직원.부서코드 = 부서.부서코드;

  • 중첩된 루프
  • 중첨된 루피를 통해서 비교해서 비효율이 발생하나, 인덱스와 옵티마이저를 주로 쓴다. 반정규화하여 하나의 테이블에 저장하면 조인을ㅇ 통한 성능 저하는 해결되기에 반정규화가 있음.

2 정규화를 사용한 성능 튜닝

  • 조인으로 인하여 성능이 저하되는 무넺를 반정규화로 해결함
  • 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킴
  • 조인을 하면 칼럼은 증가하ㅁ지만, 블록의 크기가 커지게 된다. → 이로 입출력 데이터가 증가함

003 반정규화(De-Normalization)

1 반정규화(De-Normalization)

  • 데이터 베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터 베이스 향상 방법
  • 반정규화는 조회 속도를 향상하지만, 데이터 모델의 유연성은 낮아짐

2 반정규화를 수행하는 경우

  • 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우

  • 다량의 범위를 자주 처리해야 하는경우

  • 특정 범위의 데이터만 자주 처리하는 경우

  • 요약/ 집계 정보가 자주 요구되는 경우

  • 반정규화 절차

  1. 대상조사 및 검토 : 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사함.
  2. 다른 방법 검토 : 다른 방법이 있느 지 검토
  3. 반정규화 수행 : 테이블 속성, 관계 등을 반정규화함.

클러스터링 : 인스트 정볼르 저장할 떄 물리적으로 정렬해서 저장하는 방법

3 반정규화 기법

(1) 계산된 칼럼 추가

  • 배치 프로그램으로 미리 계산하고 그 결과를 특정 칼럼에 추가한다.

(2) 테이블 수직분할

  • 하나의 테이블을 두 개의 테이블로 분할함.

(3) 테이블 수평분할

  • 하나의 테비을에 있는 값을 기준으로 테이블을 분할

파티션 기법

  • Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.

  • List Partition : 특정한 값을 지정하여 파티션을 수행한다.

  • Hash Partition : 해시 함수를 적용하여 파티션을 수행한다.

  • Composite Parittion : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.

  • 파티션 테이블의 장점

  • 데이터 조회시에 엑세스 범위가 줄어들기 떄문에 성능이 향상된다.

  • 데이터가 분할되어 있기 떄문에 입출력 성능이 향상된다.

  • 각 파티션을 독립적으로 백업 및 복구가 가능하다.

(4) 테이블 병합

  • 1대 N 관계의 경우 많은 양의 데이터 중복이 발생함.

  • 슈퍼 타입 과 서브타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킴.

  • 슈퍼타입 및 서브 타입 변환 방법

  1. OnetoOne Type : 슈퍼타입과 서브타입을 개별 테이블로 도출 / 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어려움
  2. Plus Type : 슈퍼 타입과 서브 타입 테이블로 도출 / 조인이 발생하고 관리가 어려움
  3. Singel Type : 슈퍼 타입과 서브 타입을 하나의 테이블로 도출 / 조인 성능이 좋고 관리가 편하지만 입출력 성능이 나쁘다.

004 분산 데이터베이스

1 분산 데이터베이스

  • 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고 분산된 작업 처리를 수행하는 데이터 베이스. 투명성이 제공되야 분산된 지 확인 가능

  • 분산 데이터베이스의 투명성 종류

  1. 분할 투명성
  2. 위치 투명성
  3. 지역 사상 투명성
  4. 중복 투명성
  5. 장애 투명성
  6. 병행 투명성

2 분산 데이터베이스 설계 방식

(1) 상향식 설계 방식

지역 스키마 작성 후 향후 전역 스키마를 작성하여 분산 데이터 베이스를 구축

(2) 하향식 설계 방식

전역 스키마 작성 후 해당 지역 사상 스키마를 작성하여 분산 데이터베이스를 구축함.

사용자

전역 스키마

지역 사상 스키마

지역 DBMS 1

지역 DB

  • 분산 데이터베이스 장점과 단점
  1. 장점 : 신뢰성과 가용성 높은ㅁ/ 빠른 응답 / 용량 확장
  2. 단점 : 관리와 통제가 어렵다. / 무결성 관리가 어렵다 / 설계가 복잡함
반응형

'Develope_MySQL' 카테고리의 다른 글

[SQLD] SQL D 정리 - 데이터 모델링의 이해 -1  (0) 2021.02.08