자격증/SQLD

SQLD(2)-데이터 모델과 성능

jhs0129 2021. 8. 10. 15:16
320x100
반응형
  • 정규화 - 함수적 종속성을 근거로 진행

*함수적 종속성 - x가 변화하면 y가 변화한다 => x는 y를 함수적으로 종속한다.

ex)  회원아이디(pk) 변경시 회원 이름도 변경

 

목적 - 데이터의 일관성, 데이터 중복 최소화, 데이터 유연성 최대화를 위한 데이터 분해

         비지니스에 변화가 있더라도 데이터 모델의 변경을 최소화

 

1~5정규화까지 있으나 대체적으로 3정규화를 넘기지 않음

정규화를 하지 않으면 불필요한 데이터의 입력 - (Anomaly)문제가 발생

분해를 하더라도 join을 통해서 다시 합쳐서 볼 수 있음

 

  • 제1정규화

 

 

 

완전한 함수 종속성을 이룰 수 있는 pk를 지정

이때 pk는 2개 이상이여도 됨

*Account -> AccountName and Money

 ID -> name

 

 

 

  • 제2정규화

 

pk가 2개 이상인 테이블에 대해서만 이루어짐 (부분 함수 종속성 발생)

해당 pk에 대해서 새로운 테이블로 도출

 

*table1에서 ID와 Name을 따로 도출

 

 

  • 제3정규화

*이행 함수 종속성 - pk를 제외하고 열간에 종속성이 발생하는 경우

                        - 삼단논법으로 생각 x->y, y->z => x->z  해당경우 x,y y,z두개의 테이블로 분해

1,2정규화를 수행 후에 해야 함

  • BCNF

복수의 후보키가 있고 후보키들이 복합 속성, 서로 중첩되어야 할 경우 테이블 분해

일반 열이 후보키를 결정하는 경우

 

정규화 절차 설명
제1정규화 Attribute의 원자성 확보
pk지정
제2정규화 pk가 2개 이상의 Attribute로 이루어 진 경우
부분함수 종속성 제거
제3정규화 pk를 제외한 열간에 종속성 제거 - 이행 함수 종속성
BCNF 후보키가 있는 경우 후보키가 pk를 종속시키면 분해
제4정규화 다중값 종속성 제거
제5정규화 조인에 의해서 종속성이 발생되는 경우 분해

 

  • 정규화의 문제점

select시 join을 하기 때문에 cpu memory를 많이 사용

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

프로그램화 했을시

for(int i=0; i<N; ++i)
	for(int j=0; j<M; ++j)
    	if(직원_부서코드[i] == 부서_부서코드[j]{}

데이터양 증가시 시간증가와 부하 유발 -> 해결하기 위해서 반정규화를함

하지만 반정규화시 데이터의 중복이라는 또다른 문제점 발생

 

  • 반정규화

데이터의 중복은 허용하되 성능을 향상시키기 위해서 하는 방법(select 속도 향상, 모델의 유연성저하)

데이터의 중복이 있기때문에 수행전에 대상 조사및 다른 방법을 찾고 마지막에 반정규화를 수행함

 

수행하는 경우

  • 수행속도가 느려지는 경우
  • 다량의 범위를 자주하는 처리하는 경우
  • 특정범위 데이터를 자주 처리하는경우
  • 요약 정보가 자주 요구되는 경우

 

  • 반정규화 기법
  • 계산된 칼럼추가

총합계, 평균, 평가등을 미리 계산하고 추가

  • 테이블 수직분할

열을 기준으로 분할하는 기법 Column (c1,c2,c3,c4,c5,c6) => Column1 (c1,c2,c3), Column2 (c4,c5,c6)

  • 테이블 수평분할

행의 값 기준으로 분할하는 기법 Row(2001, 2002, 2003, 2004) => Row1 (2001, 2002) Row2 (2003, 2004)

*분할 기법

  1. Range Partition - 범위를 기준
  2. List Partition - 특정 값을 지정
  3. Hash Partition - 해시 함수를 적용
  4. Composite Partition - 범위와 해시 두개를 동시에 사용
  • 테이블 병합

1:1 관계의 테이블 두개를 하나로 병합

1:N 관계의 테이블 두개를 하나로 병합 -> 많은양의 데이터 중복 발생

슈퍼타입과 서브타입관계일 경우 병합 -> 고객엔터티(슈퍼타입), 개인고객, 법인고객(서브타입)

변환방법 설명
OneToOne type 개별 테이블 유지
조인 많고 관리 어려움
Plus type 슈퍼+서브테이블 도출
조인 많고 관리 어려움
Single type 두개를 하나의 테이블로 유지
관리 편하지만 입출력 성능 하락

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

 

  • 분산데이터베이스 <-> 중앙 집중형 데이터베이스
  • 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 분산작업을 처리 수행

*투명성 종류 - 분할 : 사용자는 데이터베이스가 분할되어있는지 알 필요성 없음

                 - 위치 : 저장장소 명시 필요X, 어디 있든 접근 가능 

                 - 지역사상 : 지역 시스템 이름과 무관한 이름 사용가능

                 - 중복 : 데이터베이스 객체가 중복되어도 데이터는 일관됨

                 - 장애 : 통신망에 장애가 생겨도 무결성 보장

                 - 병행 : 동시에 트랜잭션 수행 가능

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

상향식 - 지역스키마 작성 후 전역스키마 작성

하향식 - 전역스키마 작성 후 지역스키마 작성

 

장점 - 신뢰성 가용성, 빠른 응답(병렬처리가 가능), 용량 확장용이

단점 - 관리 통제 어려움, 보안관리, 무결성관리, 설계 복잡 

320x100
반응형