◆ 함수적 종속성
- X와 Y를 각각 속성의 부분집합이라고 가정했을 때
-> X 값을 알면 Y값을 바로 식별할 수 있고, X 값에 의해 Y 값이 달라질 때 Y는 X의 함수적 종속이라고 한다.
- 이 경우 X를 결정자, Y를 종속자라고 한다. (X -> Y)
ex) 학번을 알면 이름, 나이, 성별 식별 가능 => 결정자 : 학번 / 종속자 : 이름, 나이, 성별
학번 -> 이름 / 학번 -> 나이 / 학번 -> 성별
☞ 이름, 나이, 성별은 학번에 함수적 종속 관계이다.
☆ 전공코드와 전공명은 학번으로 식별 불가능 (복수전공) => 종속관계 아님
※ 학번 -> 기본키
학번
|
이름
|
나이
|
성별
|
전공코드
|
전공명
|
110011
|
박지현
|
26
|
여성
|
AAA1
|
국문학과
|
110011
|
박지현
|
26
|
여성
|
C0B7
|
컴퓨터공학과
|
131001
|
김민석
|
25
|
남성
|
C0A5
|
전기전자공학과
|
120006
|
홍현희
|
25
|
여성
|
B1027
|
무용과
|
- 종속 관계 종류
● 완전 함수적 종속
- 종속자가 기본키에만 종속
ex) 기본키가 회원본호 속성으로 이름, 나이 , 거주지역 속성은 회원번호를 알아야 식별가능
-> 이름, 나이, 거주지역은 회원번호에 완전 함수 종속된 관계
회원번호
|
이름
|
나이
|
거주지
|
A001
|
송민지
|
17
|
서울
|
A002
|
박아람
|
15
|
부산
|
A003
|
이예은
|
16
|
대전
|
ex) 기본키는 고객ID와 상품코드 속성으로 구성
수량 속성은 기본키를 구성하는 고객ID, 상품코드 속성을 모두 알아야 식별가능
-> 수량은 기본키를 구성하는 고객ID, 상품코드에 완전 함수 종속 관계
※ 기본키임에도 중복인 것은 테이블이 합쳐진 것
고객ID
|
상품코드
|
주문상품
|
수량
|
가격
|
AAAA01
|
T001
|
티셔츠
|
2
|
12000
|
AAAA01
|
B110
|
청바지
|
1
|
11000
|
AAAA02
|
B110
|
청바지
|
2
|
22000
|
AAAA03
|
T091
|
와이셔츠
|
1
|
15000
|
● 부분 함수적 종속
- 테이블에서 종속자가 기본키가 아닌 다른 속성에 종속
- 기본키가 여러 속성으로 구성되어 있을 경우, 기본키를 구성하는 속성 중 일부만 종속되는 경우
ex) 기본키는 고객ID와 상품코드로 구성
주문상품 속성은 기본키들 중 상품코드만 알아서 식별가능
-> 주문 상품 속성은 기본키에 부분 함수 종속 관계
고객ID
|
상품코드
|
주문상품
|
수량
|
가격
|
AAAA01
|
T001
|
티셔츠
|
2
|
12000
|
AAAA01
|
B110
|
청바지
|
1
|
11000
|
AAAA02
|
B110
|
청바지
|
2
|
22000
|
AAAA03
|
T091
|
와이셔츠
|
1
|
15000
|
● 이행 함수적 종속
- 테이블에서 X, Y, Z라는 3개의 속성이 있을 때, X -> Y, Y -> Z란 종속 관계가 있을 경우,
X -> Z가 성립될 때 이행 함수적 종속
( X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우)
ex) 상품번호를 알면 소분류를 알 수 있음 / 소분류를 알면 대분류도 알 수 있음
-> 상품번호를 알면 대분류를 알 수 있으므로 이행 함수적 종속
상품번호
|
상품명
|
소분류
|
대분류
|
A001
|
검은 체크무늬 셔츠
|
상의
|
의류
|
A002
|
유선 마우스
|
마우스
|
전자제품
|
A003
|
유기농 양배추
|
야채
|
식료품
|
A004
|
포테이토 칩
|
스낵
|
식료품
|
A005
|
32인치 4K 모니터
|
모니터
|
전자제품
|
◆ 정규화
- 목표 : 테이블 간의 중복된 데이터를 허용하지 않는 것 => 무결성 유지
( 부분 함수적 종속이나 이행 함수적 종속은 좋지 않은 데이터베이스이므로 정규화를 통해 완전종속으로 만듬)
- DB의 저장 용량 역시 줄일 수 있음
- 정규화 단계
● 제 1 정규화
- 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
ex) 추신수, 박세리는 여러 개의 취미를 가지고 있음 -> 제 1정규형을 만족하지 못함 => 분해
이름
|
취미들
|
김연아
|
인터넷
|
추신수
|
영화, 음악
|
박세리
|
음악, 쇼핑
|
장미란
|
음악
|
↓↓↓↓↓↓↓
이름
|
취미
|
김연아
|
인터넷
|
추신수
|
영화
|
추신수
|
음악
|
박세리
|
음악
|
박세리
|
쇼핑
|
장미란
|
음악
|
● 제 2 정규화
- 제 1 정규화가 완료된 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 기본키의 부분집합이 결정자가 되면 안된다는 것
ex) 기본키는 학생번호, 강좌이름으로 구성
학생번호
|
강좌이름
|
강의실
|
성적
|
501
|
데이터베이스
|
공학관 110
|
3.5
|
401
|
데이터베이스
|
공학관 110
|
4.0
|
402
|
스포츠경영학
|
체육관 103
|
3.5
|
502
|
자료구조
|
공학관 111
|
4.0
|
501
|
자료구조
|
공학관 111
|
3.5
|
![](https://blog.kakaocdn.net/dn/opdLh/btsxrVMKcIv/Jhn17foplAN0sb7CFT5Cfk/img.png)
#1
![](https://blog.kakaocdn.net/dn/3y2Yy/btsxqaqeg2v/mKAofUXKi3mMxdjVGVU9T0/img.png)
#2 강의실 분해 -> 제 2 정규형 만족
![](https://blog.kakaocdn.net/dn/pgheH/btsxvHAfx9B/PuDZjk79krVJTejExKTRPK/img.png)
● 제 3 정규화
- 제 2정규화를 진행한 테이블에 대해 이행 함수적 종속을 없애도록 테이블을 분해하는 것
- A -> B / B -> C 일때, A -> C가 성립되는 것을 이행 함수적 종속이라 한다.
ex) 학생번호는 강좌 이름을 결정하고 있고, 강좌 이름은 수강료를 결정하고 있다.
-> 테이블을 분해해야 한다.
![](https://blog.kakaocdn.net/dn/cUeCFz/btsxkioMM34/ldE3RUHZrw2AbbjocdG3rk/img.png)
※ 만약 수강료가 오르면 해당 강좌의 모든 수강료 값을 모두 바꿔야 함
-> 아래와 같이 분해하면 두 번째 테이블만 수정해주면 됨
#1 학생번호 -> 강좌이름
![](https://blog.kakaocdn.net/dn/dDxR9m/btsxquvmhFS/hKRajFSHMzalEmmj8kc8RK/img.png)
#2 강좌이름 -> 수강료
![](https://blog.kakaocdn.net/dn/crVek7/btsxsmDolwx/UpTDw30SUmkRhrbniiCQC1/img.png)
● BCNF 정규화
- 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
- 결정자가 기본키가 아닌 것을 제거 -> 테이블 분해
![](https://blog.kakaocdn.net/dn/xnviM/btsxsmcj8s4/SkrtNN9qYY2I8PyhGcmZwk/img.png)
#1
![](https://blog.kakaocdn.net/dn/13UUN/btsxH2qrF3y/B49WmttkmSJg0zKv05cVF1/img.png)
#2
![](https://blog.kakaocdn.net/dn/cmBPGP/btsxp9SmBWK/leAfKkD0ZNUqAjiMpKRSbK/img.png)
'DBMS(SQL)' 카테고리의 다른 글
SQL 조인 연산, 집합 (8일차) (0) | 2023.10.09 |
---|---|
DBMS실습 (SQL 심화) - ORDER BY, LIMIT, DISTINCT, GROUP BY, 서브 쿼리, 다중 조건문(7일차) (0) | 2023.10.09 |
트랜잭션(Transaction) (6일차) (0) | 2023.10.09 |
DBMS 실습 - SQL 함수 [자주쓰는 함수] - 2 (5, 6일차) (0) | 2023.10.09 |
DBMS 실습 - SQL 함수 [자주쓰는 함수] - 1 (5, 6일차) (0) | 2023.10.09 |