개발의변화
정규화과정 본문
정규화(Normalization)
릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
테이블 간에 중복된 데이터를 허용하지 않는 다는 것
이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량을 줄일 수 있다
제1 정규형(1NF(normal form)
1. 각 컬럼이 하나의 속성만을 가져야한다
2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야한다
3. 각 컬럼이 유일한(unique) 이름을 가져야 한다
4. 칼럼의 순서가 상관없어야 한다
유저번호 | 이름 | 스탯 | 평점 |
1 | 박지성 | 활동량,수비 | 10 |
2 | 손흥민 | 달리기,슛 | 4 |
3 | 차범근 | 드리블 | 3 |
주특키 칼럼이 1번을 불만족하므로 스탯 칼럼을 맞게 분해해야 한다
유저번호 | 이름 | 스탯 | 평점 |
1 | 박지성 | 활동량 | 10 |
2 | 손흥민 | 달리기 | 4 |
3 | 차범근 | 드리블 | 3 |
1 | 박지성 | 수비 | 10 |
2 | 손흥민 | 슛 | 4 |
제2 정규형
1. 1정규형을 만족해야 한다
2. 모든 컬럼이 부분적 종속(Partial Dependeny)이 없어야 한다 == 모든 칼럼이 완전 함수 종속을 만족
부분 함수 종속: 특정 칼럼에만 종속이 되는것
완전 함수 종속: 기본키의 부분집합이 결정자가 되면 안되는 것
유저번호 | 이름 |
1 | 박지성 |
2 | 손흥민 |
3 | 차범근 |
1 | 박지성 |
2 | 손흥민 |
{유저번호,이름}을 같이 넣어 유저번호 릴레이션을 생성하고
이름 | 스탯 | 평점 |
박지성 | 활동량 | 10 |
손흥민 | 달리기 | 4 |
차범근 | 드리블 | 3 |
박지성 | 수비 | 10 |
손흥민 | 슛 | 4 |
{이름,스탯,평점}을 같이 넣어 스탯에 따른 평점을 확인하는 릴레이션을 생성한다
이렇게 전체 데이터를 각각의 릴레이션으로 분리하고 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 한다
제3정규형
제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태를 말한다
이행적 함수 종속: A->B,B->C로 종속되어 있으면 논리적으로 A->C가 성립하는데, 이 때 집합 C가 집합A에 이행적으로 함수 종속이 되었다고 볼 수 있음
한 쇼핑몰에서 등급에 따라 할인율이 다르다고 가정했을 때
유저ID | 등급 | 할인율 |
홍철 | 플래티넘 | 30% |
범수 | 다이아 | 50% |
가영 | 마스터 | 70% |
유저 -> 등급 -> 할인율 이므로
유저 -> 등급, 등급 -> 할인율의 두 개의 테이블로 분해할 수 있다
유저ID | 등급 |
홍철 | 플래티넘 |
범수 | 다이아 |
가영 | 마스터 |
등급 | 할인율 |
플래티넘 | 30% |
다이아 | 50% |
마스터 | 70% |
보이스/코드 정규형(BCNF)
보이스/코드 정규형(BCNF)은 제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말함
결정자: 함수 종속 관계에서 특정 종속사(dependent)를 결정짓는 요소, 'X->Y'일 때 X는 결정자, Y는 종속자
요구 사항:
각 상품에는 상품코드가 없을수도 있다
각 상품은 품질 점수를 가지고 있다
상품코드 | 상품 | 품질 점수 |
1 | 고기 | 1 |
2 | 라면 | 3 |
3 | 김치 | 5 |
4 | 쌀 | 7 |
NULL | 야채 | 9 |
야채 상품에는 상품코드가 존재하지 않을 경우가 생길 수 있으므로 {상품코드,상품},{상품,품질 점수}로 테이블을 분리한다
상품코드 -> 상품 -> 품질 점수이므로 상품 속성이 결정자이지만 후보키가 아니므로 이 상품 속성을 분리해야 한다
상품코드 | 상품 |
1 | 고기 |
2 | 라면 |
3 | 김치 |
4 | 쌀 |
상품 | 품질 점수 |
고기 | 1 |
라면 | 3 |
김치 | 5 |
쌀 | 7 |
야채 | 9 |
규형 원칙 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형,트랜잭션(원자성,커밋과 롤백, 트랜잭션 전파, 일관성, 격리성) 팬텀 리드, 반복 가능하지 않는 조회, 더티 리드, 격리 수준, 지속성, 무결성
'데이터베이스' 카테고리의 다른 글
MySQL(IFNULL,WITH) (0) | 2023.09.27 |
---|---|
자바 변수형 (0) | 2023.06.10 |
SELECT 문 (0) | 2023.06.08 |
트랜잭션 (0) | 2023.04.19 |
ERD와 정규화 과정 (0) | 2023.04.18 |