티스토리 뷰

CS지식

정규화

몰라모르겠어요 2022. 9. 3. 17:47

정규화

  • 테이블을 정규형이라고 불리는 형태에 부합하게 만들어나가는 것
  • 데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정
  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스(무결성 개선)

장점

  • 데이터베이스 이상 현상 제거
    • 삽입이상
      • 특정 데이터가 존재하지 않아 중요한 데이터를 삽입할 수 없는 현상 
    • 삭제이상
      • 특정 정보를 삭제하면, 원치 않는 정보도 삭제되는 현상
    • 갱신 이상
      • 갱신을 했는데 정상적으로 변경되지 않은 경우, 또한 너무 많은 행을 업데이트 하는 현상

삽입이상 - 신설된 수학과는 학생이 없다. 그렇기 때문에 기본키인 학번도 없다. 기본키가 없으므로 삽입을 할 수 없다.
삭제이상
갱신이상 - 경영학과 학과명을 변경하고 싶다. 해당 학과의 학생 수는 100명으로 100명의 학과명을 모두 변경해줘야 하는 문제가 발생한다.

 

  • 데이터 구조 안정성 및 무결성 유지
  • 저장 공간 최소화(중복 최소화)
  • 데이터 삽입 시 릴레이션 재구성 필요성 감소
  • 효과적인 검색 알고리즘 생성 가능

단점

  • 릴레이션 간 조인 연산 증가 -> 속도 저하

 

정규화 과정

  • 제 1 정규화
    • 테이블의 컬럼이 원자 값을 갖도록 테이블을 분해

제 1정규화 전
제 1정규화 후

  • 제 2 정규화
    • 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블 분해
      • 완전 함수 종속
        • 기본키의 부분 집합이 결정자가 되어서는 안 된다.

기본키는 학생 번호와 강좌이름이다. 그런데 강좌이름만 알아도 강의실을 알 수 있다. 이렇게 기본키의 일부가 데이터의 결정자가 되어서는 안 된다.
이렇게 테이블을 제 2정규화 해주면, 학생번호와 강좌이름으로 성적을 알 수 있고, 부분 집합이 결정자가 되는 것이 없다.

  • 제 3 정규화
    • 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블 분해
      • 이행적 종속
        • A -> B, B -> C가 성립할 때, A -> C가 성립되는 것

학생번호는 강좌이름을 결정한다. 강좌이름은 수강료를 결정한다. 그렇기 때문에 학생번호는 수강료를 결정한다. 이렇게 되면 문제가 무엇일까? 만약 이행적 종속이 존재한다면 501번 학생이 강좌이름을 변경하면 그에 맞게 수강료도 변경해줘야 한다. 하나만 수정할 거를 여러 데이터를 해줘야 하므로(무결성, 일관성을 유지하려면) 번거롭다.
이렇게 분리해주면 번거로움이 없다.

  • BCNF 정규화
    • 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블 분해

기본키는 학생번호와 특강이름이다. 기본키는 교수를 결정한다. 그런데 보니까 교수 또한 특강이름을 결정한다. 여기서 문제는 교수가 특강이름을 결정하는데 후보키가 아니라는 점이다. 후보키를 모르나? 후보키는 기본키가 될 수 있는 후보들로 유일성과 최소성을 동시에 만족하는 데이터
위처럼 분리한다면 교수가 특강이름을 결정하고, 유일성과 최소성을 만족하는 후보키이다.

 

반대로 비정규화(반정규화)에 대해서 간단히 보겠다.

비정규화(반정규화)

  • 하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법

장점

  • 빠른 데이터 조회가 가능하다. (조인 비용이 줄어든다)
  • 조회 쿼리가 간단해진다.

단점

  • 데이터 갱신, 삽입 비용이 높아진다.(중복해서 있으므로)
  • 갱신, 삽입 코드 작성이 어려워진다.
  • 데이터 간 일관성이 깨질 수 있다.

 

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

Spring IoC  (0) 2022.08.17
DI(Dependency Injection)  (0) 2022.07.29
Spring, Spring Boot  (0) 2022.07.29
스프링 프레임워크  (0) 2022.07.29
스택과 큐  (0) 2022.07.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함