728x90
반응형
예시 테이블>
학생번호 | 학생명 | 수강과목번호 | 수강과목명 | 학점 |
s001 | 권정열 | c101, c102 | Oracle, JDBC | A+, B+ |
s002 | 박보검 | c102, c103 | JDBC, Servlet/JSP | A, C |
1NF
더 이상 쪼갤 수 없는 원자값으로 나눔
학생번호 | 학생명 | 수강과목번호 | 수강과목명 | 학점 |
s001 | 권정열 | c101 | Oracle | A+ |
s001 | 권정열 | c102 | JDBC | B+ |
s002 | 박보검 | c102 | JDBC | A |
s002 | 박보검 | c103 | Servlet/JSP | C |
2NF
부분함수 종속 제거
학생번호를 알면 학생명 알 수 있음(결정자-종속자 관계)
수강과목번호를 알면 수강과목명 알 수 있음
학점은 학생번호와 수강과목 번호 둘다에 종속
학생번호 | 수강과목번호 | 학점 |
s001 | c101 | A+ |
s001 | c102 | B+ |
s002 | c102 | A |
s002 | c103 | C |
학생번호 | 학생명 |
s001 | 권정열 |
s002 | 박보검 |
수강과목번호 | 수강과목명 |
c101 | Oracle |
c102 | JDBC |
c103 | Servlet/JSP |
예시 테이블>
(결정자)학생번호 - (종속자)학생명, 학과번호
후보키(유일+최소) - 학생번호
슈퍼키(유일) - 학생번호, 학생번호&학생명, 학생번호&학생명&학과번호
학생번호 | 학생명 | 학과번호 | 학과명 | 학비 |
s001 | 권정렬 | d001 | 교육심리학과 | 3500000 |
s002 | 박보검 | d002 | 토목공학과 | 4500000 |
*슈퍼키(super key) - 한 행을 다른행과 구분할 수 있으면 슈퍼키(유일성)
*후보키(candidate key) - 슈퍼키 중에서 최소성을 확보한 것
3NF
이행함수 종속 제거
학생번호 | 학생명 | 학과번호 |
s001 | 권정렬 | d001 |
s002 | 박보검 | d002 |
학과번호 | 학과명 | 학비 |
d001 | 교육심리학과 | 3500000 |
d002 | 토목공학과 | 4500000 |
예시 테이블>
전제조건 : 한 교수는 한 과목만 가르칠 수 있음,
한 과목은 여러 교수에 의해 가르칠 수 있음
학생번호 | 과목번호 | 교수번호 | 학점 |
s001 | c101 | p201 | A+ |
s001 | c102 | p202 | B+ |
s002 | c102 | p203 | A |
s002 | c103 | p204 | C |
BCNF
3NF를 만족하면서 결정자 중에 후보키가 아니면 제거(후보키가 하나밖에 없다면 BCNF해당 X)
학생번호 | 과목번호 | 학점 |
s001 | c101 | A+ |
s001 | c102 | B+ |
s002 | c102 | A |
s002 | c103 | C |
과목번호 | 교수번호 |
c101 | p201 |
c102 | p202 |
c102 | p203 |
c103 | p204 |
반응형
'프로그래밍 > SQL' 카테고리의 다른 글
SQL과 NoSQL (0) | 2020.12.24 |
---|---|
11.20(서브쿼리와 조인의 차이점) (0) | 2020.11.20 |
09.16(정규화) (0) | 2020.09.16 |
05.29(Trigger) (0) | 2020.05.29 |
05.28(PL/SQL) (0) | 2020.05.28 |