ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스 정규화
    오늘/Today I.. 2024. 4. 7. 22:12

     

     

    데이터베이스 정규화란?

    데이터베이스 설계에서 데이터의 중복을 최소화하고 

    데이터 무결성을 유지하기 위해 데이터를 구조화하는 과정

     

    이상현상이 있는 릴레이션을 분해하여

    이상현상을 제거하여 중복된 데이터를 허용하지 않게 함

     

    결과적으로 데이터 무결성을 유지하고

    데이터베이스 저장공간을 확보할 수 있다.

     

     

    데이터베이스 정규화 절차

     

     

     

     

    일반적으로 제 3 정규형 또는 BCNF까지 진행하면 데이터베이스 설계에 무리가 없다.

    제 4, 제 5 정규형까지 가서 중복을 완전히 제거해버릴경우 다른 문제가 발생할 수 있다.

     

    제 1정규형부터 BCNF까지는 기본 정규형

    제 4정규형, 제 5정규형은 고급 정규형으로 분류한다. 

     

     


     

    제 1 정규형 (1NF)

     

    제1 정규형은 모든컬럼의 값이  원자값이어야 한다.

    즉, 각 필드는 반드시 하나의 값만을 가져야 함

     

    이를 통해

    데이터의 중복 최소화

    쿼리의 단순성 유지

     

    실제 코드에서는 다대다(N:M) 관계를

    관계 테이블을 통해 해결하는 것이

    제 1정규형을 적용하는 것

     

     

     

     

    취미 컬럼에 여러 취미가 한칸에 들어있다.  이건 제 1정규형을 위반하고 있음

    각테이블에 해당 속성에 대한 정보만을 담도록 제 1정규형을 적용

     

     


     

     

    제 2 정규형 (2NF)

     

    제 1정규형을 만족하는 경우 제 2정규형을 적용 가능

    제 2정규형은 기본키가 아닌 모든 속성이 완전 함수적 종속을 만족해야함

    (기본키에 완전 함수 종속 되어야 함)

     

    복합키로 구성된 경우가 제 2정규형의 대상이 됨

     

    * 완전 함수적 종속이란

    부분적으로 종속된 속성이 없어야 함

     

     

     

    구분번호와 과목코드는 복합키이다.

    과목명은 과목코드에만 종속되고, 담당교수도 과목코드에만 종속되므로 

    제 2정규형을 위반하고 있다.

     

    구분번호와 과목코드를 이용하여 수업테이블을 분리하여 정보를 관리하고

    과목코드, 과목명, 담당교수로 과목테이블을 생성하여 과목정보를 분리한다.

     

     


     

     

     

    제 3 정규형 (3NF)

     

    제 2정규형을 만족하는 경우 제 3정규형을 적용 가능

    기본키를 제외한 속성 중 이행 종속성이 없어야 한다.

    (간접적으로 관련된 정보를 분리)

     

    * 이행 종속성이란

    A를 알면 B를 알 수 있다,  B를 알면 C를 알 수 있다.

    → A를 알면 C를 알 수 있다.

    삼단 논법과 유사

     

     

     

    과목코드가 담당교수를 결정하고 담당교수가 교수소속학과를 결정하는 관계

    제 3정규형 위반

     

    담당교수와 교수소속학과를 분리해서 새 테이블을 생성하고

    교수소속학과 컬럼을 제거

     

     


     

     

     

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

     

    제 3정규형의 한계를 극복하기 위한 버전

    강한 제 3정규형이라고도 한다.

    제 3정규형에서 해결할 수 없는 이상현상을 해결 할 수 있다.

     

    BCNF를 만족하기 위한 조건

    1. 제 3정규형을 만족해야한다.

    2. 모든 결정자가 후보키 집합에 속해야 한다.

    3. 완전 함수적 종속을 만족해야 한다.

     

    *결정자란

    어떤 속성의 값이 다른 속성의 값을 결정하는 속성을 의미

     

      

     

     

    강좌명은 강사명과 강사 이메일을 결정한다.

    그러나 강좌명이 모든 정보의 유일한 결정자는 아니므로

    BCNF를 만족하지 않는다.

     

    아래와 같이 테이블을 분리하면

    강좌명은 강사명을 결정하고, 강사명은 강사 이메일을 결정하게 된다.

    이렇게 되면 각 테이블은 BCNF를 만족하게 된다.

     

    각 결정자가 테이블의 후보키로써 역할을 수행

     

     

     


     

     

     

    제 4 정규형 (4NF)

    BCNF를 더욱 확장한 형태

    테이블 내에 존재할 수 있는 다치 종속성을 제거하는 것

    (모든 다치 종속성이 후보키에 의해서만 결정됨)

     

    * 다치종속성이란?

    하나의 속성이 다른 여러 속성에 대해 여러 값을 가질 수 있는 관계

    ex) 한 사람이 여러 개의 취미를 가질 수 있고,

    여러 개의 전화번호를 가질 수있는 경우

     

    제 4정규형을 만족하지 않는 테이블은

    데이터 삽입, 삭제, 갱신 시 이상현상 발생 가능

     

     

     

    학생ID에 대해 취미와 전화번호는 현재 서로 독립적인 다치 종속성을 가지고 있다.

    한 학생의 취미와 그 학새으이 전화번호는 서로 영향을 주지 않으면서도

    학생 ID에 종속되어 있다.

     

    아래와 같이 분리하여 각 테이블이 제 4정규형을 만족하도록 하고,

    데이터 중복을 줄이며 관리의 효율성을 높일 수 있다.

     

     

     


     

     

     

    제 5 정규형 (5NF)

    정규화 과정의 마지막 단계

    조인 종속성을 해결하여 데이터 중복을 최소화하고 무결성을 유지

     

    *조인 종속성

    하나의 릴레이션을 여러 개의 릴레이션으로 분해했다가

    그대로 다시 결합할 수 있다면 조인 종속이라고 한다.

     

    일반적으로 현실의 데이터베이스는 5정규형을 사용하지 않음

     

     

     


     

     

    정규화에서 발생할 수 있는 단점

     

    단점1. 성능 저하

    과도한 정규화는 데이터 저장을 위해 더 많은 테이블을 생성

    이는 조회 시 여러 테이블을 조인하게 만들며

    조인 연산은 DB의 성능을 저하시킬 수 있다.

     

    단점2. 복잡성 증가

    더 많은 테이블 관계를 관리해야 하므로 설계가 복잡해진다.

     

    단점3. 개발 및 유지보수 증가

    복잡성이 증가함에 따라 해당 비용이 증가하게 된다.

     

    단점4. 응답시간 지연

    4NF, 5NF에서는 다치 종속, 조인 종속 제거를 위해 테이블을 세분화하는데

    이로 인해 단일 쿼리의 응답시간이 지연될 수 있다.

     

     

     

     

    '오늘 > Today I..' 카테고리의 다른 글

    4월 결산, 5월 계획  (0) 2024.05.14
    Virtual Thread 는 왜 도입된걸까  (0) 2024.03.25
    오늘, Redis가 죽었다.  (0) 2024.03.23
    데이터베이스 정규화 (기본 정규형)  (0) 2024.03.06
    서버리스 (Serverless)  (0) 2024.02.29
Designed by Tistory.