데이터베이스 정규화
1. 불필요한 데이터 삭제
2. 삽입, 수정 ,삭제시 이상 현상 방지
제 1 정규화
- 한속성이 단하나의 값만 존재
1) 다가 속성
이름 | 번호 | (PK)고객번호 |
홍길동 | 1 | 1 |
홍길동 | 2 | 1 |
- 고객 번호를 안다고 해도 이름과 번호를 알 수 없다.
- 번호를 PK로 바꾸던가 인조키를 만들어준다.
이름 | 고객번호(PK) |
홍길동 | 1 |
번호(PK) | 고객번호(FK) |
1 | 1 |
2 | 1 |
2) 복합 속성 사용
고객번호(PK) | 이름 | 주민번호 |
100 | 홍 길동 | 990303 |
- 하나의 컬럼에 여러개의 정보가 들어있음 이름 (성 +이름)
- 컬럼을 분리한다.
- 상황에 따라 사용한다.
고객번호(PK) | 성 | 이름 | 주민번호 |
100 | 홍 | 길동 | 930909 |
3) 유사속성 반복
주문번호1 | 상품1 | 주문번호2 | 상품2 |
1 | 의자 | 2 | 책상 |
데이터 증가에 따라서 컬럼이 증가해서는 안된다.
주문번호 별로 상품이름을 매칭한다.
주문번호(PK) | 상품이름 |
1 | 책 |
2 | 의자 |
제 2 정규화
- 2개 이상으로 구성된 PK에서 발생
- 일반속성 중에서 후보 식별자 전체에 종속적이지 않은 새로운 엔티티 생성
- PK 가 A,B 인 상황에서 B만 알아도 결정됨
주문번호(PK) | 상품번호(PK) | 상품명 | 단가 | 주문수량 |
100 | 202 | 의자 | 2000 | 1 |
상품번호만 알면 상품명과 단가가 결정된다.
상품테이블을 만들고 상품번호를 외래키로 주문테이블에 넣는다.
주문번호(PK) | 상품번호(FK) | 주문수량 |
100 | 202 | 1 |
상품번호(PK) | 상품명 | 단가 |
202 | 의자 | 2000 |
제 3 정규화
- 식별자가 아닌 일반 속성 상에서는 종속성이 존재 하지 않는다.
- PK가 아닌값이 일반 컬럼의 값을 결정하는 종속성 존재
- PK가 A,B 인 상황에서 일반 속성 C 가 D 를 결정하는 종속성 존재
주문번호(PK) | 고객번호 | 고객명 | 주문일자 |
100 | 302 | 홍길동 | 2020.09.09 |
고객번호가 고객명을 결정하지만 고객번호는 PK가 아님
고객 테이블을 만들고 일반 속성이었던 고객 번호를 기본키로 만든다.
주문번호(PK) | 고객번호(FK) | 주문일자 |
100 | 302 | 2020.09.09 |
고객번호(PK) | 고객명 |
302 | 홍길동 |
BC 정규화
- 종속 식별자가 후보 식별자가 아니어야 한다.
- 일반 속성이 오히려 기본키를 종속한다.
- A,B가 기본키인 상황에서 C가 B를 결정함
학생번호(PK) | 교수번호(PK) | 과목번호 | 학점 |
1 | 2 | 2001 | A |
2 | 3 | 3423 | B |
- 교수는 1개만 강의하는 상황 , 강의는 중복 되지 않는다.
- 강의를 알면 교수를 알 수 있다.
- 과목번호를 FK로 가지는 학생학점 테이블을 만든다.
- 과목 테이블을 만들고 과목번호를 기본키로 교수번호를 정의한다.
학생번호(PK) | 과목번호(FK) | 학점 |
1 | 2001 | A |
2 | 3423 | B |
과목번호(PK) | 교수번호 |
2001 | 2 |
3423 | 3 |
역정규화
- Join시에 발생하는 계산량을 줄여 성능을 높이기 위해 사용
- 정규화된 결과의 일부를 수정하여 중복을 허용
- 정규화되지 않은 상태의 중복과는 다름
- A,B가 기본키이고 C가 B만 알면 결정되어서 2정규화를 위해 (A,C) , (B,A)로 분리하여 2정규화를 진행하였지만 성능을 위해
(A,C) , (B,A,C)로 분리함
- (B,A,C)에서 A는 외래키로 활요
- C가 중복된다.
상품번호(PK) | 상품명(PK) | 가격 |
101 | 의자 | 3000 |
- 상품명이나 상품번호만 알면 엔티티가 결정된다.
- 상품번호 테이블과 상품명 테이블로 분리 , 상품명을 외래키로 가진다.
상품번호(PK) | 가격 |
101 | 3000 |
상품명(PK) | 상품번호(FK) |
의자 | 101 |
- 제2 정규화를 진행하였지만 성느을 위해 상품명 테이블에 가격또한 추가해서 이를 통해 조인이 가능도록 한다.
상품명(PK) | 상품번호(FK) | 가격 |
의자 | 101 | 3000 |
'C.S > DB' 카테고리의 다른 글
Oracle 파티션 테이블과 파티션 인덱스 (INSERT 튜닝) (0) | 2022.07.06 |
---|---|
Oracle 파티션 테이블과 파티션 인덱스 (DELETE 튜닝) (0) | 2022.07.06 |
Oracle 파티션 테이블과 파티션 인덱스 (UPDATE 튜닝) (0) | 2022.07.06 |
Oracle 파티션 테이블과 파티션 인덱스 (0) | 2022.07.05 |
DB 트랜잭션의 정의, 특징 (0) | 2021.02.28 |