# 함수적 종속
함수적 종속 개념을 근간으로 정규화를 진행한다.
# 정규화의 이론
# 비공식적 설계 가이드 라인
1. 일반적으로 관계형 스키마에는 2가지 단계가 있다.
- 사용자 레벨
- base relation ㅣevel
일반적인 정규화는 base relation level이다.
# 데이터 베이스에서 중복이 일어나면 문제가 있다는 것이다. ( 데이터 중복 )
1. 데이터 낭비
2. 갱신을 할 때, 문제가 생길 수 있다.
- insertion anomalies 삽입 이상
- deletion anomalies 삭제 이상
- modification anomalies 갱신 이상 / 무언가를 업데이트 하려고 할 때, 중복 데이터 때문에 하나에 대한 것을 고치면 중복된 모든 부분을 고쳐야 한다.
=> 이런 경우는 어떻게 처리해야 하는가? 처음 설계를 잘 설정해야 한다.
# NULL 값이 없도록 설계해야 한다.
# 불필요한 튜플들을 없애야 한다.
# 제 1 정규형
어떤 X의 값이 어떤 Y의 값을
X가 함수적으로 Y를 결정한다.(종속이 되어 있다)
* 함수적 종속을 수학적으로 표현
두가지 컬럼을 비교하여 한 칼럼에서 같은 값이 있을 때, 다른 칼럼도 같은 값이 존재한다면 종속성이 있다는 뜻이다.
종속이 존재하는 것끼리 두개로 나눠서 쪼개는 것이다.
R1(ssn, hours, ename, plocation), R2(pnumber, pname)
=> 서로 연결고리가 없어졌다. 그래서 R1에 기본키로 pnumber을 넣어 줘야 한다. 연결고리를 둘 기본키가 필요하다.
R1(ssn, panme, hours, ename), R3(pname, plocation), R2(pnumber, pname)
R1(ssn, panme, hours), R4(ssn, ename), R3(pname, plocation), R2(pnumber, pname)
=> 정규화를 상세하게 진행될 경우이다.
해당 관계에 정규화를 진행하라.
R1(ssn, pname, hours) R2(pnumber, plocation, pname)
=> 실생활에서는 이정도면 사용가능하다.
*t1[x] = t2[x], t1[y] = t2[y]
K가 어떤 R의 Key라면, 다른 모든 속성에 대해 함수적 종속이 일어나야 한다.
함수적 종속성을 찾아봐야 한다.
# 제 1 정규형, 2 정규형, 정규형
정규화를 할 수록 쪼개질 것이다.
거꾸로 질의를 주고 검색을 할 때는 연결을 해줘야 한다. 이것이 앞에서 배운 관계 대수에서 join연산이다.
테이블을 쪼개는 과정이 정규화이다.
1NF
- single atomic value를 가지고 있어야 한다. 하나의 속성에는 하나의 value만 들어가야 한다.
- 예시. eno, ename, address, tel, bdate