정규화(Normalization)

  • 데이터의 중복을 줄이고, 무결성 향상, 이상 현상을 방지한다.

 

이상 현상(Anomaly)

  • 잘못된 정규화로 데이터의 중복이 발생되고, 무결성이 저하되는 현상
  • 삽입 이상(Insertion Anomaly)
    • 기본키가 {Studnet ID, Course ID} 일 때, Course를 수강하지 않은 학생은 Course ID가 없음.
    • 기본키는 Null이 될 수 없어서 테이블에 추가 불가능
  • 갱신 이상(Update Anomaly)
    • 어떤 학생의 전공이 A에서 B로 바뀌는 경우, 모든 A를 B로 바꿔야 한다. 하지만 일부가 바뀌지 않는 형상
  • 삭제 이상(Deletion Anomaly)
    • 어떤 학생이 수강을 삭제할 때, {Student ID, Department, Course ID, Grade} 정보 중에 Student ID, Department와 같은 학생에 대한 정보도 삭제 된다.

 

 

제1 정규화(1NF)

  • 테이블 칼럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것
  • 릴레이션에 속한 모든 도메인이 원자값으로만 되어 있어야한다.
  • 모든 속성에 반복되는 그룹이 나타나지 않는다.
  • 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별 가능해야 한다.

 

제2 정규화(2NF)

  • 제 1정규화를 만족하고, 테이블의 모든 칼럼이 완전 함수적 종속을 만족해야 한다.
  • 기본키가 복합키(키1, 키2) 일 때, 두개의 키 중 하나의 키만 남긴다.

 

제3 정규화(3NF)

  • 제 2정규화를 만족하고, 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리한다.
  • A -> B, B -> C 이면 = A -> C

 

정규화의 장점과 단점

  • 장점
    • 데이터베이스를 변경 할 때, 이상 현상을 방지할 수 있다.
    • 데이터베이스를 확장할 때, 정규화 데이터베이스는 일부만 변경해도 된다. 
  • 단점
    • 릴레이션의 분해로 인해, 릴레이션 간의 연산(JOIN)이 증가하게 된다. -> 응답 시간 저하
    • 과도한 정규화와 데이터 입력/수정/삭제 연산이 잦으면, 데이터 처리 속도가 느려저 응답 시간 저하 or 데이터 무결성 X

 

반정규화

  • SQL에서 잦은 조인으로 성능 저하가 나타나는 경우에 반정규화 사용
  • 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만 조회하는 경우 사용
  • 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우
  • 테이블에 지나친 조인으로 데이터 조회가 어려울 경우

 

 

 

+ Recent posts