ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQLD 요약] I. 데이터 모델링의 이해 (2)
    자격증/SQLD (SQL 개발자) 2021. 4. 27. 20:38
    728x90
    반응형

     

     

    SQLD 요약 / SQL Developer 요약

    🔑 정규화/ 함수적종속성/ 제1정규화/ 제2정규화/ 부분함수종속성/ 제3정규화/ 이행함수종속성/ BCNF/ 

           반정규화/ 파티션기법/ 테이블병합/ 슈퍼타입-서브타입/ 분산데이터베이스/ 투명성/ 상향식설계방식/ 하향식설계방식

     

     

    I. 데이터 모델링의 이해

       01. 데이터 모델링의 이해

       02. 데이터 모델과 성능

     

     



     

    02. 데이터 모델과 성능

     

     

    [1] 정규화 (Normalization)

    (1) 정규화 | 데이터를 분해하고, 중복을 제거하여, 데이터 모델의 독립성을 확보하는 과정

    이상현상 존재하는 모델을 ⇒ 정규화된 모델로! 정규화 Normalization
    - 데이터의 일관성, 최소한의 중복, 최대한의 유연성을 위한 방법
    - 이상현상이 존재하는 모델: 새로운 데이터를 추가할 때,
      불필요한 정보를 같이 추가하거나, 아예 추가할 수 없는 문제 발생

    - 정규화된 모델: 테이블 분해 → 중복 데이터 제거됨
    - 분해된 테이블은 Join 연산을 통해 합집합으로 통합 가능
    - 비즈니스 변화가 생겨도, 데이터 모델의 변경을 최소화할 수 있음!

    - 제 1~5 정규화 가능함/ 실질적으로는 제 3 정규화까지만 수행

     

     

    • 정규화 절차: 제 1 정규화 - 제 2 정규화 - 제 3 정규화 - BCNF - 제 4 정규화 - 제 5 정규화
    제 1 정규화 제 2 정규화 제 3 정규화
    - 속성 원자성 확보
    - 기본키 설정
    - 기본키가 속성 2개 이상
    - 부분 함수 종속성 제거
    - 기본키 외 칼럼 간 종속성 제거
    - 이행 함수 종속성 제거
    BCNF (Boyce-Codd Normal Form) 제 4 정규화 제 5 정규화
    후보키가 기본키를 종속시키면  분해함 - 여러칼럼이 한칼럼 을 종속시키면
    - 다중값 종속성 제거
    조인에 의해서 종속성 발생하면 분해함

     

     

    (2) 함수적 종속성 | X → Y 이면, Y는 X에 함수적으로 종속 = X가 변화하면 Y도 변화

    • 제 1 정규화 (1NF)
    제 1 정규화: 나머지 칼럼들을 함수적으로 종속하는 "기본키"를 설정
    - "학번" 하나 혹은 "학생ID" 하나만으로
      유일성을 만족하지 못하는 경우라고 가정함.
    - 따라서 "학번"과 "학생ID" 2개의 칼럼을 기본키로 설정.

     

     

    • 제 2 정규화 (2NF)
    제 2 정규화: 기본키가 2개 이상의 칼럼으로 이루어진 경우, 부분 함수 종속성을 제거
    - 부분 함수 종속성: 기본키가 2개 이상인 경우에만 발생.
    - "학생ID" 하나가 "이름" 하나만 함수적으로 종속.

    - "학생" 테이블로 분해하여, 새로운 테이블을 도출.
    - "학생" 테이블의 기본키를 "학생ID" 로 설정.

    - 부분 함수 종속성을 제거함.

     

     

    • 제 3 정규화 (3NF)
    제 3 정규화: 제 1 , 제 2 정규화를 수행한 다음, 이행 함수 종속성을 제거
    - 이행 함수 종속성: 기본키 외 다른 칼럼 간에 종속성 발생.
    - "지도교수" 가 "학과" 에 함수적으로 종속.

    - "지도교수" 테이블로 분해하여, 새로운 테이블을 도출.
    - "지도교수" 테이블의 기본키를 "학과" 로 설정.
    - 이행 함수 종속성을 제거함.

     

     

    • BCNF (Boyce-Codd Normal Form)
    BCNF: 복수의 후보키 & 복합속성 후보키 & 서로 중첩되는 경우
    - 복수의 후보키가 나머지 칼럼을 함수적으로 종속.
    - 기본키("학번", "과목번호")가 "교수"를 종속.
    - "교수"가 후보키이고 "과목번호"를 함수적으로 종속.
      ("교수"가 최소성, 유일성을 만족하여 후보키로 인식됨)
    - "교수" 테이블로 분해하여, 새로운 테이블을 도출.
    - "교수" 테이블의 기본키는 "교수"로 설정.
    - "과목번호"는 "교수" 테이블의 속성이 됨.

     

     


     

     

    [2] 정규화와 성능

    (1) 정규화의 문제점

    정규화의 문제점: 조인 & 성능저하 유발 정규화의 문제 해결 방법 반정규화의 문제점
    - 데이터 조회 시 조인(Join)을 유발함
    - CPU, 메모리를 많이 사용함
    - 정규화는 조인을, 조인은 부하를 유발함


    - (ex) "직원"과 "부서"테이블에서
               "부서코드"가 같은 행을 찾는 경우
    - 중첩된 루프 = 이중 for문을 사용해야 함

    - 데이터양 증가하면, 비교 건수도 증가함
    - 인덱스, 옵티마이저를 통해 비효율 해결
    - 조인에 의한 성능 저하를 해결하기 위해
      반정규화를 하여, 하나의 테이블에 저장

    - 반정규화: 데이터 중복을 허용
    - 칼럼이 계속 증가하여, 조인이 최소화됨
    - 조인 감소하면, 조회 빠르게 할 수 있음
    - 반정규화는 데이터를 중복시키므로
      또 다른 문제점을 발생시킴
    - 너무 많은 칼럼이 추가되면,
      1개 행의 크기가 너무 커짐
    - DB 관리시스템의 입출력 단위인
      블록 크기(Block Size) 를 초과함
    - 1개 행을 읽기위해 여러 블록을 읽어야 함
      → 디스크 입출력 증가 → 성능 저하 유발

     

    • 반정규화 수행: 트랜잭션 유형 및 용량 등을 분석하고, 정규화를 수행한 후에, 반정규화를 수행해야 한다. (병렬처리 X)
      ⇒ 트랜잭션 유형과 데이터 용량 등을 고려해보고, 성능 이슈가 특별히 없다면 반정규화를 하지 않아도 된다~

    • 반정규화를 수행하면 정규화된 모델보다 조회속도가 항상 빨라지는 것이 아니다!
      - 반정규화를 통해 하나의 테이블에 칼럼 개수가 많아지면, 조인 개수는 감소한다.
      - 그러나 테이블 행의 길이가 길어지면서, 입출력 단위보다 길어질 수도 있다.
      - 이러한 경우, 하나의 행을 조회할 때 입출력을 여러 번 하면서 성능이 떨어질 수 있다..

     


     

     

    [3] 반정규화 (De-Normalization)

    (1) 반정규화 | 데이터베이스 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 방법

     

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

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

    • 반정규화 절차: 대사 조사 및 검토 - 다른 방법 검토 - 반정규화 수행
    ① 대상 조사 및 검토 ② 다른 방법 검토 ③ 반정규화 수행
    데이터 처리범위, 통계성 등을 확인 클러스터링, 뷰, 인덱스 튜닝 등을 검토 테이블, 속성, 관계 등을 반정규화

     

     

    • 반정규화 기법: 계산된 칼럼 추가/ 테이블 수직분할/ 테이블 수평분할/ 테이블 병합
    ① 계산된 칼럼을 추가함 ② 테이블 수직분할 ③ 테이블 수평분할 ④ 테이블 병합
    - (ex) 총판매액, 평균잔고 등
    - 필요한 값을 미리 계산하여
      특정 칼럼에 추가함
    - 한 테이블에서 칼럼 분할
    - 두개 이상의 테이블로 분할
    - 값을 기준으로 테이블 분할
    - (한 테이블에서 분할)
    - 1대1 관계를 하나로 병합
    - 1대N 관계의 테이블을 병합
    - 슈퍼-서브 타입 관계를 병합

     

     

    • 파티션 기법 (Partition): 테이블 분할 방법 중 하나
      - 파티션을 사용하여 테이블을 분할하면
      - 논리적으로는 하나의 테이블이지만
      - 물리적으로는 여러 개의 데이터 파일에 분산 저장된다.
    파티션 기법 장점 파티션 기법 종류
    - 데이터 조회 시, 액세스 범위 감소 → 성능 향상
    Range Partition: 데이터 값 범위를 기준으로 파티션
    - 분할되어 있기 때문에, Input/Output 성능 향상 List Partition: 특정값을 지정하여 파티션
    - 각 파티션을 독립적으로 백업&복구 가능 Hash Partition: 해시 함수를 적용하여 파티션
      Composite Partition: 범위+해시를 복합적으로 사용함

     

    • 테이블 병합
      - 1대1 관계의 테이블 → 테이블 1개로 병합
      - 1대N 관계의 테이블 → 병합으로 성능은 올릴 수 있지만, 데이터 중복이 다량 발생함

    • 슈퍼타입과 서브타입 관계가 발생하면 → 테이블 통합으로 성능 향상시킴
    • 슈퍼타입-서브타입은 부모-자식 관계!
    Super type & Sub type 배타적 관계와 포괄적 관계
    <배타적 관계>

    SuperType 이
    Sub1 이거나,
    Sub2 인 경우

    (ex)

    "고객"이 "개인고객"이거나
    "법인고객"인 경우
    <포괄적 관계>

    SuperType 이
    Sub1 일 수도 있고,
    Sub2 일 수도 있는 경우

    (ex)
    "고객"이 "개인고객"일 수도,
    "법인고객"일 수도 있음

     

     

    • 슈퍼타입 및 서브타입 변환 방법
     OneToOne Type Plus Type Single Type
    - 슈퍼타입, 서브타입을
      개별 테이블로 도출함
    - 테이블 개수가 많음
    - 조인 다수 발생
    - 관리 어려움
    - 슈퍼타입과 서브타입
      테이블로 도출
    - 조인 발생
    - 관리 어려움
    - 슈퍼타입, 서브타입을
      하나의 테이블로 도출함
    - 조인 성능 좋음
    - 관리 편리함
    - 입출력 성능 나쁨↓

     

     


     

     

    [4] 분산 데이터베이스

    분산 데이터베이스 구조

     

     

    (1) 분산 데이터베이스 | 분산된 작업 처리를 수행하여, 투명성을 제공하는 데이터베이스

    • 중앙 집중형 데이터베이스: 1대의 물리적 시스템에 DB 관리 시스템을 설치 → 여러 사용자가 시스템에 접속하여 사용

    • 분산 데이터베이스: 물리적으로 떨어진 DB에 네트워크로 연결 → 단일 DB 이미지를 보여주고 분산된 작업 처리 수행
      - 네트워크로 분산되어 있음
      - 지역 DB를 독립적으로 관리
      - 동일한 관리 시스템: 분산 DB 구축이 어렵지 않음
      - 여러 종류의 관리 시스템: 이기종 DB 관리 시스템으로 연동 → DB 미들웨어(ODBC, JDBC)를 사용해야 함
    분산 데이터베이스 장점 분산 데이터베이스 단점
    - 신뢰성 & 가용성 높음
    - 병렬처리 수행 → 빠른응답 가능
    - 시스템 용량 확장 쉬움
    - 보안 & 관리 & 통제 어려움
    - 데이터 무결성 관리 어려움
    - 데이터베이스 설계 복잡

     

     

    • 분산 데이터베이스의 투명성 제공:
      DB를 사용하는 고객은 시스템이 분산되어 있는지 여부는 인식하지 못하면서, 
      자신만의 DB를 사용하는 것처럼 사용할 수 있어야 한다!

    • 분산 데이터베이스의 투명성 종류: 분할 투명성/ 위치 투명성/ 지역 사상 투명성/ 중복 투명성/ 장애 투명성/ 병행 투명성
    투명성 설명
    분할 투명성 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요 없음.
    위치 투명성 - 고객이 사용하려는 데이터의 저장 장소를 명시할 필요 없음.
    - 데이터가 어느 위치에 있더라도, 동일 명령을 사용하여 데이터에 접근 가능!
    지역 사상 투명성 각 지역 시스템의 이름과 무관한 이름을 사용 가능.
    중복 투명성 객체가 여러 시스템에 중복되어 존재해도, 데이터의 일관성이 유지됨.
    장애 투명성 각 지역 시스템 혹은 통신망이 이상이 생겨도, 데이터의 무결성이 부장됨.
    병행 투명성 여러 고객이 동시에 트랜잭션을 수행해도, 결과에 이상 없음.

     

     

    (2) 분산 데이터베이스 설계방식 | 상향식 & 하향식

    상향식 설계 방식 하향식 설계 방식
    지역 스키마 작성 후 → 전역 스키마 작성 전역 스키마 작성 후 → 지역 스키마 작성
    지역별로 데이터베이스를 구축한 후에
    전역 스키마로 통합한다.
    전사 데이터 모델(기업 전체)을 수렴하여 전역 스키마 생성,
    그 다음에 각 지역별로 지역 스키마를 생성한다.

     

     


     

    참고도서: SQL 개발자 이론서+기출문제_이기적, 2020

     

     

    728x90
    반응형