데이터 모델링의 이해 2

SSAD·2023년 2월 19일
0

SQLD

목록 보기
2/10

Section2 데이터 모델과 성능



1. 정규화


1. 정규화(Normalization)

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

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

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

  • 1정규화부터 5정규화까지 있지만, 실질적으로 3 정규화까지만 수행

정규화하지 않아 이상현상이 존재하는 모델

직원정보

직원정보
++++++++
사원번호
부서코드
------
이름
전화번호
주소
부서명
  • 위 테이블은 정규화를 수행하지 않은 것
  • 부서 테이블과 직원 테이블이 하나로 합쳐 둔 것
  • 새로운 직원이 추가 되는 경우 부서 정보가 없으면 부서코드를 임의 값으로 넣어야 함 (불필요 정보 추가)
  • 새로운 부서가 추가 될 경우 사원 정보가 없기 때문에 임의 값으로 사원번호를 입력하거나 추가할수 없음
  • 테이블을 분리해야 함

정규화된 모델

직원
++++++
사원번호
-----
부서코드(FK)
이름
전화번호
주소
-----

부서
+++++
부서코드
-----
부서명
-----
  • 정규화된 모델은 테이블이 분해
  • 직원 테이블과 부서 테이블 간에 부서코드로 조인(Join)을 수행하여 하나의 합집합으로 만들 수 있음
  • 중복데이터 제거

정규화 절차

제 1정규화

  • 속성(Attribute)의 원자성을 확보
  • 기본키(Primary)를 설정

제 2정규화

  • 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)

제 3정규화

  • 기본키를 제외한 칼럼 간에 종속성을 제거
  • 이행 함수 종속성을 제거

BCNF

  • 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해

제 4정규화

  • 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해 다중값 종속성을 제거

제 5정규화

  • 조인에 의해서 종속성이 발생되는 경우 분해

2. 함수적 종속성(Functional Dependency)

1. 제 1정규화

  • 정규화는 함수적 종속성을 근거로 함
  • 함수적 종속성이란 X->Y이면 Y는 X에 함수적으로 종속된다고 말함
  • 함수적 종속성은 X가 변화하면 Y도 변화하는지 확인
    ex) 회원ID가 변화하면 이름도 변경될 것 (회원ID - 기본키, 회원ID가 이름을 함수적 종속함)

  • 계좌 테이블 X가 Y 칼럼들을 함수적으로 종속하고 있음
  • X는 계좌 번호 하나만으로는 유일성을 만족하지 못한다고 가정한 것
  • 계좌번호와 회원ID를 기본키로 잡은 것
  • 이처럼 기본키를 잡는것이 제 1정규화

2. 제 2정규화

  • 부분 함수 종속성이란, 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생
  • 기본키가 하나의 칼럼으로 이루어지면 제 2정규화는 생략
  • 기본키에 있는 회원 ID가 변경되면 이름이 변경됨
  • 회원 ID가 이름을 함수적으로 종속하고 있는 것
  • 부분함수 종속성이 발생하면 분해를 해야 함
  • 부분 함수 종속성을 제거하면 위와 같음
  • 회원이라는 새로운 테이블이 도출되고 회원ID가 기본키가 됨

3. 제 3정규화

  • 제 3정규화는 이행 함수 종속성을 제거
  • 이행함수 종속성이란 기본키를 제외하고 칼럼간에 종속성이 발생하는 것
  • 제 3정규화는 제 1정규화와 제 2정규화를 수행한 다음 수행
  • 위처럼 관리점이 관리점 코드에 종속되는 것을 이행 함수 종속성이라 함
  • 제 3 정규화를 수행하면 위처럼 관리점 테이블이 도출되고 관리점 코드가 기본키가 됨

4. BCNF(Boyce-Codd Normal Form)

  • BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 함
  • 기본키(학번, 과목명)가 교수를 함수적으로 종속하고 있음
  • 교수가 후보키(최소성과 유일성을 만족)이고 교수가 과본명을 함수적으로 종속하는 경우 분해가 일어남
  • 위와 같은 경우 교수 테이블을 새롭게 만들고, 기본키는 교수로 하고 칼럼은 과목명이 된다.
  • 이러한 작업을 BCNF라고 함


2. 정규화와 성능


1. 정규화의 문제점

  • 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임

  • 정규화는 데이터 조회(SELECT)시에 조인(Join)을 유발하기 때문에 CPU와 메모리를 많이 사용

  • 인덱스와 옵티마이저가 있어서 실제로 엄청난 비효율은 발생하지 않음

  • 조인이 부하를 유발하는것은 확실함

  • 정규화의 문제점을 해결하기 위해서 반정규화를 하여 하나의 테이블에 저장하면 조인을 통한 성능 저하를 해결할수 있음

  • 성능 저하를 해결하기 위해 반정규화가 있는 것


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

  • 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있음

  • 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생

  • 너무 많은 컬럼이 추가되면 한개 행의 크기가
    데이터베이스 관리 시스템의 입출력 단위 블록의 크기를 넘어서게 됨

  • 한 개의 행을 읽기 위해서 여러 개의 블록을 읽어야 함

  • 디스크의 입출력이 증가하여 성능이 떨어짐

  • 정규화 : 입출력 데이터의 양을 줄여서 선능을 향상시킬수 있는 것



3. 반 정규화(De-Normalization)


1. 반 정규화(De-Normalization)

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

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

  • 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

반 정규화 절차

대상 조사 및 검토

  • 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사한다

다른 방법 검토

  • 반정규화를 수행하기 전에 다른 방법이 있는지 검토한다.
    ex) 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토

반정규화 수행

  • 테이블, 속성, 관계 등을 반 정규화 한다

TIP : 클러스터링(Clustering)

  • 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 떄 물리적으로 정렬해서 저장하는 방법
  • 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상됨

3. 반정규화 기법

1. 계산된 칼럼 추가

  • 배치 프로그램으로 총판매액, 평균잔고, 계좌평가 등을 미리 계산하고, 그 결과를 특정 컬럼에 추가

2. 테이블 수직 분할

  • 하나의 테이블을 두 개 이상의 테이블로 분할
  • 칼럼을 분할하여 새로운 테이블을 만드는 것

3. 테이블 수평분할

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

TIP: 파티션(Partition) 기법

  • 데이터베이스에서 파티션을 사용하여 테이블을 분할 할 수 있음
  • 파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장
  • Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행
  • List Partition : 특정한 값을 지정하여 파티션을 수행
  • Hash Partition : 해시 함수를 적용하여 파티션을 수행
  • Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행

파티션 테이블의 장점

  • 데이터 조회 시에 액세스(Access)범위가 줄어들기 때문에 성능이 향상
  • 데이터가 분할되어 있기 떄문에 I/O(input/output)의 성능이 향상
  • 각 파티션을 독립적으로 백업 및 복구가 가능

4. 테이블 병합

  • 1대 1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴
  • 1대 N 관계의 테이블을 병합하여 성능을 향상시킨다. 하지만 많은 양의 데이터 중복이 발생
  • 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킴

TIP: Super type과 Sub type

  • 고객 엔티티는 개인 고객과 법인 고객으로 분류
  • 이때 고객 엔티티는 슈퍼 타입이고 개인고객과 법인고객은 서브 타입이 됨
  • 부모와 자식 간의 관계가 나타남
  • 슈퍼 타입과 서브 타입의 관계는 베타적 관계와 포괄적 관계가 있는데,
    베타적 관계는 고객이 개인고객이거나, 법인 고객인 경우를 의미
    포괄적 관계는 고객이 개인고객일 수도 있고 법인고객일 수도 있는 것

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

OneToOne Type

  • 슈퍼 타입과 서브 타입을 개별 테이블로 도출
  • 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어려움

Plus Type

  • 슈퍼 타입과 서브타입 테이블로 도출
  • 조인이 발생하고 관리가 어려움

Single Type

  • 슈퍼 타입과 서브 타입을 하나의 테이블로 도출
  • 조인 성능이 좋고 관리가 편하지만, 입출력 성능이 나쁨


4. 분산데이터베이스


1. 분산 데이터베이스

  • 데이터베이스 시스템 구축 시에 한 대의 물리적 시스템에 데이터베이스 관리 시스템을 설치하고
    여러 명의 사용자가 데이터베이스 관리 시스템에 접속하여 데이터베이스를 사용하는 구조를
    중앙 집중형 데이터베이스라고 함

  • 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고
    분산된 작업 처리를 수행하는 데이터베이스를 분산 데이터베이스라고 함

  • 분산 데이터베이스를 사용하는 고객은 시스템이 네트워크로 분산되어 있는지의 여부를 인식하지 못하면서
    자신만의 데이터베이스를 사용하는 것처럼 사용할 수 있음
    이처럼 데이터베이스는 투명성을 제공

  • 투명성은 분산 데이터베이스에서 중요한 요소이며
    투명성의 종류에는 분할, 위치, 지역사상, 중복, 장애 및 병행 투명성이 있음

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

분할 투명성

  • 고객은 하나의 논리적 릴레이션이
    여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 없음

위치 투명성

  • 고객이 사용하려는 데이터의 저장 장소를 명시할 필요가 없음
  • 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용하여 데이터에 접근할 수 있어야 함

지역 사상 투명성

  • 지역 DBMS와 물적 데이터베이스 사이의 사상이 보장됨에 따라 각 지역 시스템 이름과 무관한 이름이 사용 가능

중복 투명성

  • 데이터베이스 객체가 여러 시스템에 중복되어 존재함에도 고객과는 무관하게 데이터의 일관성이 유지

장애 투명성

  • 데이터베이스가 분산되어 있는 각 지역의 시스템이나 통신망에 이상이 발생해도 데이터의 무결성은 보장

병행 투명성

  • 여러 고객의 응용프로그램이 동시에 분산 데이터베이스에 대한 트랜잭션을 수행하는 경우에도 결과에 이상이 없음

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

  • 분산 데이터베이스의 구축 방법에는 상향식 설계 방식과 하향식 설계 방식 2가지가 있음

1. 상향식 설계 방식

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

2. 하향식 설계 방식

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


  • 분산 데이터베이스를 하향식 접근 방식으로 구축한다는 것은
    기업 전체의 전사 데이터모델을 수렴하여 전역 스키마를 생성하고,
    그 다음 각 지역별로 지역 스키마를 생성하여 분산 데이터 베이스를 구축하는 것

  • 상향식 접근 방식은 지역별로 데이터베이스를 구축한 후에 전역 스키마로 통합하는 것

  • 분산 데이터베이스를 구축하거나 운영할 때
    동일한 데이터베이스 관리 시스템으로 분산데이터베이스를 구축하는 것은 크게 어렵지 않음

  • 하지만 기업에 여러 종류의 데이터베이스 관리 시스템이 있으면
    이기종 데이터베이스 관리 시스템으로 연동해야 함

  • 이기종 데이터베이스 시스템으로 연동하기 위해서는 데이터베이스 미들웨어(ODBC, JDBC)를 사용해야 함

분산 데이터베이스 장점과 단점

장점

  • 데이터베이스 신뢰성과 가용성이 높음
  • 분산 데이터베이스가 병렬 처리를 수행하기 때문에 빠른 응답이 가능
  • 분산 데이터베이스를 추가하여 시스템 용량 확장이 쉬움

단점

  • 데이터베이스가 여러 네트워크를 통해서 분리되어 있기 때문에 관리와 통제가 어려움
  • 보안관리가 어려움
  • 데이터 무결성 관리가 어려움
  • 데이터베이스 셜계가 복잡함
profile
learn !

0개의 댓글