본문 바로가기

CS 전공지식

23.12.06 ERD와 정규화 과정

1. ERD

    - DB를 구축할 때 가장 기초적인 뼈대 역활

    - 릴레이션 간의 관계를 정의

    - ERD는 시스템 요구 사항을 기반으로 작성되며 이것을 기반으로 DB 구축

    - DB 구축후에도 디버깅 또는 비즈니스 프로세스 재성계가 필요한 경우 설계도 역활을 담당

    - 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용할 수 있으나 비정형 데이터를 충분히 표현할 수 없다는 단점

       * 비정형 데이터 : 비구조화 데이터를 말하며 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지

                                   않은 정보

 

2. 예제로 배우는 ERD

 1) 승원 영업부서의 ERD

     (1) 요구사항

           - 영업사원은 0 ~ n명의 고객을 관리

           - 고객은 0 ~ n개의 주문을 넣을 수 있다

           - 주문에는 1 ~ n개의 상품이 들어간다

 2) 무무오브레전드의 ERD

     (1) 요구사항

           - 선수들은 1명의 챔피언을 고를 수 있다

           - 챔피언은 한 개 이상의 스킬을 갖는다

           - 스킬은 한 개 이상의 특성을 갖는다

 

3. 정규화 과정

    - 테이블 간의 잘못된 종속 관계로 인해 DB 이상현상이 일어나서 이를 해결하거나 저장공간을 효율적으로

      사용하기 위해 테이블을 여러개로 분리하는 과정

 1) 정규형 원칙

     - 같은 의미를 표현하는 테이블 이지만 좀 더 좋은 구조로 만들어야 함

     - 자료의 중복성은 감소해야 함

     - 독립적인 관계는 별개의 테이블로 표현해야 함

     - 각각의 테이블은 독립적인 표현이 가능해야 함

     (1) 제1정규형

           - 테이블의 모든 도메인이 더이상 분해될 수 없는 원자 값만으로 구성되야 함

           - 테이블의 속성 값 중에서 한개의 기본키에 대해 두개 이상의 값을 가지는 반복집합이 있어서는 안됨

           - 반복집합이 있는 경우 제거해야함

           - 예) 홍철이란 ID에 수강명이 {C++ 코딩테스트, 프런트특강} 이 있었는데 이것을 나누어 반복집합을 제거

     

      (2) 제2정규형

           - 테이블이 제1정규형이며 부분 함수의 종속성을 제거한 형태

           - 부분함수의 종속성제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말함

           - 예) 기본키인 {유저ID, 수강명} 과 완전 종속된 유저번호 테이블과 {유저ID, 수강명} 에 따른 성취도 테이블로

                   분리됨

                   주의할 점은 테이블을 분해할 때 동등한 테이블로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해로

                   분해되야 함

     

       (3) 제3정규형

           - 제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태

              * 이행적 함수종속 

                 A -> B와 B -> C가 존재하면 논리적으로 A -> C가 성립하는데 이때 집합 C가 집합A에 이행적으로

                함수종속되었다고 함

           - 예) 무무쇼핑몰이 있다고 했을 때, 유저ID와 등급, 할인율이 정해져 있는 테이블을 다음과 같이 분해하는 것

     

       (4) 보이스/코드 정규형

           - 제3정규형이고, 결정자가 후보키가 아닌 함수 종속관계를 제거하여 함수 종속관계에서 모든 결정자가

             후보키인 상태

              * 결정자 

                 함수 종속 관계에서 특정 종속자를 결정짓는 요소, X -> Y 일때 X는 결정자, Y는 종속자

           A) 요구사항

                - 각 수강명에 대해 한 학생은 오직 한 강사의 강의만 수강

                - 각 강사는 한 수강명만 담당

                - 한 수강명은 여러강사가 담당할 수 있다

           B) 위의 테이블을 보면 {학번, 수강명} 또는 {학번, 강사} 가 후보키가 됨

           C) 만약 범석이라는 강사가 롤 이라는 수강명을 담당한다고 했을 때 이를 삽입하면 학번이 NULL이 됨

           D) 또한, 이 테이블은 아래와 같은 함수 종속 다이어그램을 가진다

           E) 즉, 강사 속성이 결정자이지만 후보키가 아니므로 이 강사 속성을 분리해야함

           D) 롤 - 범석이 제대로 들어갔고 학번 - 강사 / 수강명 - 강사로 잘 분해됨

 2) 정규형

      - 정규형 과정을 거쳐 테이블을 나눈다고 성능이 100% 좋아지지는 않음

      - 정규형 과정 후 성능이 나빠질 수도 있다

      - 테이블을 나누게 되면 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수도있다

      - 서비스에 따라 정규화 또는 비정규화 과정을 진행해야 함

'CS 전공지식' 카테고리의 다른 글

23.12.11 조인의 종류 및 원리  (0) 2023.12.11
23.12.08 인덱스  (1) 2023.12.08
23.12.07 트랜잭션과 무결성  (2) 2023.12.07
23.12.05 데이터베이스의 기본 2  (2) 2023.12.05
23.12.04 데이터베이스의 기본 1  (1) 2023.12.04