[정리노트] SQLD 2024년 개정판 - 정규화
함수적 종속성(Functional Dependency)의 개념과 기본원리
- 개념
- 데이터들이 상호 종속되는 현상, 결정자와 종속자의 관계
- X → Y: 결정자(DERTERMINANT)인 X가 종속자(DEPENDENT)인 Y를 결정
- 기본 원리
- 속성의 부분집합 X → Y에서 Y에 대응되는 X는 하나만 존재
- X가 기본키인 경우, 모든 속성 Y는 X에 종속
- X → Y인 관계에서 X가 후보키가 아닐 경우 이상현상이 발생할 수 있음
- 이상현상: 릴레이션에 테이터를 조작할 때 의도하지 않는 현상이 발생하거나 데이터 불일 혹은 누락이 발생하는 현상으로 ‘삽입이상, 갱신이상, 삭제이상’ 이 있음
- 삽입이상: 구조적 문제 때문에 불필요한 데이터까지 함께 갖춰서 추가해 줘야 하는 문제
- 갱신이상: 중복된 데이터 문제로 한 개는 변경되지만 다른 데이터는 갱신 안되는 모순
- 삭제이상: 삭제되면 안되는 데이터가 함께 삭제되며 모순 발생
함수적 종속성(Functional Dependency)의 종류
정규화
- 개념
- 불필요한 데이터 중복에 따른 이상현상 제거를 위한 무손실 분해하는 과정
- 무손실 분해 - 분해 후 Join을 통해 원래의 관계와 데이터를 복원할 수 있어야 함
- 함수적 종속성을 이용하여 릴레이션이 연관성 있는 속성 들로만 구성되도록 분해하는 과정
- 정규형: 정규화로 도출된 데이터 모델이 갖추어야 할 특성
- 다치종속
- 결정자 컬럼 A에 의해 컬럼 B의 값을 다수 알 수 있을 때, 컬럼 B는 컬럼 Aㅔ 다치 종속 되었다고 함
- 학번을 알면 해당 학생의 다수 개 수강 과목을 알 수 있을 때, 수강과목은 학번에 다치 종속 되었다고 함
- 결정자 컬럼 A에 의해 컬럼 B의 값을 다수 알 수 있을 때, 컬럼 B는 컬럼 Aㅔ 다치 종속 되었다고 함
- 불필요한 데이터 중복에 따른 이상현상 제거를 위한 무손실 분해하는 과정
- 특징
- 원칙: 무손실 분해, 함수적 종속성, 최소의 데이터 중복성 분리의 원칙
- 장점: 이상현상 제거와 일관성 유지, 중복제거 통한 저장공간 절약, 데이터 구조의 유연성 확보
- 단점: Join을 통한 정보 구성 시 성능 저하 → 반정규화 고려
- 두개 이상의 테이블을 합치는 것
- 유형
- 1차
- 속성의 원자값 확보 (취미라는 컬럼에 배구, 축구 들어가면 안됨)
- 반복되는 속성 제거, 다중값 속성의 분리
- R에 속한 모든 도메인이 원자값(atomic value)만으로 구성
- 위의 엔터티에 연락처 속성에 두가지 값이 있음, 이럴 경우 1차 정규형 위반
- 1차 정규형 위반 해소 → 연락처 제거 → 회원 연락처 엔터티 생성 → 컬럼 값으로 회원아이디, 연락처 유형, 연락처 생성
- 2차
- 부분함수 종속성 제거
- 릴레이션 R이 1NF이고, 릴레이션의 기본키가 아닌 속성들이 기본키에 완전히 함수적으로 종속
- 기본키가 하나의 컬럼일 경우 생략 가능
- 위의 엔터티에 갱신 시에 갱신 이상이 발생할 가능성 존재
- 고객아이디만 알아도 고객명, 고객등급 알 수 있음
- 주문 시마다 고객정보를 저장해야 함
- 고객 정보 바뀌면 해당 테이블 다 변경해야
- 고객 정보의 중복이 발생할 수 있음
- 고객 정보를 모르면 주문이 불가능 함
- 2차 정규형 위반 해소 → 고객명, 고객 등급 제거
- 3차
- 이행함수 종속성 제거
- 릴레이션 R이 2NF이고, 기본키가 아닌 모든 속성들이 기본키에 대하여 이행적 함수 종속성의 관계를 가지지 않음
- 즉, 기본키 외의 속성들 간에 함수적 종속적을 가지지 않는 경우
- 식별자를 제외한 일반 속성 끼리 종속이 발생하여 제거 필요
- 3차 정규형 위반 해소 → 직업 엔터티 생성 → 직업코드, 직업명 컬럼 추가
- 기타
- BCNF, 4차 정규화, 5차 정규
- 정규화 수행 이후, 성능향상과 운영 단순화를 위해 반정규화를 고려한다.
- 모델 통합(테이블 반정규화), 부가 정보 추가 (칼럼 반정규화, 중복관계 추가)
- 1차
반응형
'스터디 > SQL' 카테고리의 다른 글
[정리노트] SQLD 2024년 개정판 - 트랜잭션의 이해 (61) | 2024.08.14 |
---|---|
[정리노트] SQLD 2024년 개정판 - 관계와 조인의 이해 (57) | 2024.08.13 |
[정리노트] SQLD 2024년 개정판 - 식별자 (116) | 2024.08.04 |
[정리노트] SQLD 2024년 개정판 - 속성 (80) | 2024.07.29 |
[정리노트] SQLD 2024년 개정판 - Entirty (엔터티) (63) | 2024.07.24 |