일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 문자열
- sql
- 크루스칼
- python
- Java
- 코테
- Algorithm
- 공개키 암호화
- Queue
- jsp
- data structure
- spring
- 생성자
- 개발자취업
- 암호학
- js
- 자바의정석
- generic class
- 가상컴퓨팅
- BFS
- dbms
- 자료구조
- javascript
- 코딩테스트
- JPA
- dfs
- 항해99
- 코딩테스트준비
- 알고리즘
- DB
- Today
- Total
PLOD
[DB] Normalization(정규화) 본문
- 좋은 디자인 조건
1) 속성간의 관계가 명확
2) 데이터 베이스 중복 해결
3) 데이터베이스 무결성 확립
-Anomaly(이상)
1)insertion Anomaly(삽입이상) : 데이터 삽입 시 의도와 다른 값들도 삽입됨
2)Deletion Anomaly(삭제이상) : 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제
3)Update Anomaly(갱신이상) : 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생
-> 원인은 redundancy(중복) 때문 해결책은 decomposition(분해 : 정규화)이다 .
-정규화 : 관계형 데이터 베이스의 설게에서 중복(redundancy)를 최소화(minimize) 하게 데이터를 구조화 하는 프로세스
-Decomposition
ex) 학생 엔티티를 학생 엔티티와 학과 엔티티로 분해
학생(학번, 이름, 학과, 학과장, 학과전화, 학년)
=> 학생(학번, 이름, 학년, 학과)
학과(학과, 학과장, 학과전화)
-lossless-join Decomposition
R = (A, B, C)
F = {A → B, B → C)
-> R1 = (A, B), R2 = (B, C) = > Dependency preserving (의존성 유지)
* 정규화
정규화의 기본 목표는 테이블 간의 중복된 데이터를 허용하지 않는 것이다(개체 무결성) , 정규화를 함으로써 무결성을 유지할 수 있고 DB의 저장 용량 역시 줄일 수 있다. 효과적인 검색 알고리즘을 생성 할 수 있고 여러가지 이상현상(삽입,삭제,갱신)을 막을 수 있다.
[1NF]
테이블의 컬럼이 원자 값을 갖도록 테이블을 분해하는 것이다. 즉 , 하나의 속성이 복수개의 값을 갖도록 설계되어 있을 때
하나의 속성이 단일값(automic value)을 갖도록 변경하는 과정
[2NF]
테이블의 대해 완전 함수 종속을 만족하도록 분해하는 것 (기본키의 부분집합이 결정자가 되어선 안된다), 주식별자가 아닌 속성 중에서 주 식별자가 아닌 일부 속성에 종속된 속성을 찾아 제거하는 과정
[3NF]
테이블에 대해 이행적 종속을 없애는 것 (A->B , B->C ==> A->C), 주식별자가 아닌 속성들 중 종속관계에 있는 속성을 찾아 제거하는 과정
Lossless Decomposition(무손실 분해) & Dependency preserving(의존성 유지) 가능 but , Data Redundancy(데이터 중복)가 존재하여 Anomaly가 생길 수 있다
[BCNF]
테아블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
Lossless decomposition 가능 and Data Redundancy가 없다 but Dependency Preserving이 불가능 할 수 있다
- relational data design 목표
1) BCNF
2)dependency preserving
3) lossless join
참고 :
[Database] 정규화(Normalization) 쉽게 이해하기 - MangKyu's Diary (tistory.com)