정규화란?
- 데이터 처리에 있어 입력, 수정, 삭제의 이상 현상을 제거하여 안정적 처리(Consistency)를 보장하기 위한 방법
- 기본 원칙은 테이블에 중복된 데이터가 없도록 하는 것
- 다양한 유형의 검사를 통해 데이터 모델을 더욱 구조화하고 개선시켜 나가는 절차에 관련된 이론
함수 종속성
결정자(Determinant, X, Primary Key) → 종속자(Dependent, Y, 나머지 속성들)
종속자는 근본적으로 결정자에 함수적으로 종속관게를 가지고 있음
ex) 주민등록번호 -> (이름, 출생지, 주소)
—> 이름, 출생지, 주소는 주민등록번호에 함수 종속성을 가지고 있음
정규화 단계
- 제 1 정규화
- 한 칼럼엔 한 개의 데이터만 (함수의 속성값을 갖는 속성을 분리)
- PK(Primary Key)에 대한 Atomic Value 확보
- 반복되어 발생하는 속성을 분리하여 별도의 엔터티로 구성함
💡 1차 정규화 하지 않으면?
- 입력 이상
: 하나의 주문에 주문한 제품이 늘어나면 계속 칼럼이 추가되어야 함(?)
- 수정 이상
: 마우스의 재고수량을 9702개에서 15000개로 변경하고자 한다면 데이터를 세 번 수정해야하며, 하나라도 수정되지 않으면 정확한 재고를 알 수가 없음
- 삭제 이상
: 제품번호 1201인 스피커를 주문한 CB231 주문을 삭제하려고 한다면 제품에 대한 정보까지 삭제됨(많은 정보가 담겨 있는 한 열이 통째로 사라지니까)
- 제 2 정규화
- Primary Key 중 일부에만 종속되는 칼럼 없이 (주 식별자 전체에 종속적이지 않은 속성을 별도의 엔터티로 분리)
- 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업
- 부분 종속 속성 (partial dependency)를 제거한 테이블
합치면 primary key 역할 가능할 듯 → composite primary key
💡 2차 정규화 하지 않으면?
- 입력 이상
: 새로운 제품을 추가할 때 주문이 같이 되지 않으면 제품을 추가하는 것이 불가능(주문번호가 있어야 주문목록 테이블에 들어갈 수 있으니까)
- 수정 이상
: 하나의 제품에 대해서 재고수량을 변경하기 위해서는 주문 목록에서 해당 제품의 모든 재고수량을 수정해야 함
- 삭제 이상
: 주문 목록을 삭제할 경우 한번만 주문되었던 제품인 경우 해당 주문 목록도 같이 삭제됨
- 제 3 정규화
- composite primary key들 없을 때,
- 프라이머리 키가 아닌 칼럼에 종속되는 칼럼 없이 (속성에 종속적인 속성의 분리)
- 일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼기 (이전 종속 속성(Transitive Dependency)의 분리)
💡 3차 정규화 하지 않으면?
- 입력 이상
: 새로운 고객을 등록하려고 해도 주문을 하지 않으면 등록할 수 없음 (주문 테이블에 추가되려면 주문번호가 필요하니까)
- 수정 이상
: 여러 번 주문한 고객의 사업자번호를 변경하려고 할 경우 여러 번 수정해야 함
- 삭제 이상
: 고객이 주문을 취소한 경우 주문정보만 삭제되는 것이 아니고 고객의 정보까지 같이 삭제됨
'SQL' 카테고리의 다른 글
ERD (Entity Relationship Diagram) (1) | 2024.02.07 |
---|---|
[프로그래머스 SQL] 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.01.29 |
[SQL] 서브쿼리는 언제 쓰는 걸까 (0) | 2024.01.14 |
[데이터 분석을 위한 SQL 레시피] 20강 - 여러 개의 데이터셋 비교하기 (1) | 2023.12.28 |
[데이터 분석을 위한 SQL 레시피] 19강 - 데이터 중복 검출하기 (0) | 2023.12.28 |