[sql] 정규화

sesame·2021년 8월 17일
0

sql

목록 보기
23/24

📌이상

  • 삭제 이상
    특정 데이터 삭제할 때 원하지 않는 정보까지 삭제(데이터 손실)
  • 삽입 이상
    특정 데이터 삽입할 때 원하지 않는 데이터까지 삽입
  • 갱신 이상
    특정 속성 값 갱신 시 중복 저장되어있는 속성 값 중 하나만 갱신되고 나머지는 갱신되지 않는 데이터 불일치

정규화

발생할 수 있는 이상현상을 최대한 줄이기 위해 테이블을 재구성하고 자료의 중복을 없애, DB 데이터의 무결성을 확보하는 과정

  • 단점: DML속도가 느림

📌제1 정규화

✔ 테이블 속성이 원자값을 가져야한다.

📌제2 정규화

✔ 완전 함수 종속
엔티티(개체)에 모든 속성이 한 식별자에 종속되어야한다.
기본키의 부분집합이 결정자가 되어선 안된다.

기본키가 2개 이상으로 이루어진 경우 부분 함수 종속성을 제거한느 것으로 기본키가 하나로 구성되면 2차 정규화는 생략한다.
기본키 2개에 모두에 의해서 다른 키의 값이 결정되는 것이 완전함수종속이고, 기본키가 2개인데 하나의 기본키에 의해서만 값이 결정되는 것이 부분함수종속

📌제3 정규화

✔ 이행적 종속 제거
속성에 종속적인 속성 분리
A → B, B → C 일 때, A → C가 성립된다는 의미
1테이블 - 1식별자

이행 함수 종속성은 기본키를 제외하고 칼럼간에 종속성이 발생하는 것
예를 들어 [학번(pk), 지도교수, 과목]이라는 테이블이 있을 때 학번에 의해 지도교수가 결정되고, 지도교수에 따라 수업하는 과목이 결정되는데 기본키가 아닌 [지도교수]값에 의해 다른 칼럼인 [과목]의 값이 결정되기에 이를 이행함수종속이있다라고한다.

📌BCNF 정규화

테이블에 식별자가 여러개 존재할 때 주 식별자 제외한 다른 식별자 분리

반정규화(역정규화)

성능을 향상 시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정

  • SELECT할 때 조인으로 인한 성능 저하가 예상될 때 사용
  • INSERT, UPDATE, DELETE 할 때 성능 떨어진다.
  • 무결성 유지에 주의

반정규화 대상에 대해 다른 방법으로 처리

  • 지나치게 많은 조인일 경우 뷰를 사용하면 이를 해결할 수 있음
  • 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있음

0개의 댓글