MySQL

2024.06.13 MySQL 활용 제 2정규화(Second Normal Form, 2NF)

정훈5 2024. 6. 13. 11:44

class_33.sql

class_33.sql
0.00MB

 

 

2NF를 만족하지 못하는 데이터 예제

학생들이 수강하는 과목과 그 과목의 담당 교수에 대한 정보를 포함하는 테이블을 설계

여기서 pk는 학생ID, 과목코드의 복합 키 이다.

 

수강 정보 테이블

학생ID 과목코드 과목명 담당 교수
1 MAT101 수학 김교수
1 SCI101 과학 이교수
2 MAT101 수학 김교수
2 ENG101 영어 박교수
       

 

위 테이블에서 '과목명'과 '담당 교수'는 과목코드부분적으로 종속되어 있습니다.

즉, 학생ID와는 직접 적인 관련이 없습니다.

 

2NF 문제 해결

2NF를 만족시키기 위해 부분 종속성을 제거해야 합니다.

이를 위해 위 테이블을 분해하여 부분적 종속성을 제거할 수 있습니다.

 

  1. 수강 정보 테이블: 학생ID, 과목코드
  2. 과목 정보 테이블: 과목코드, 과목명, 담당 교수

수강 정보 테이블

학생 과목코드
1 MAT101
1 SCI101
2 MAT101
2 ENG101

 

과목 정보 테이블

과목코드 과목명 담당교수
MAT101 수학 김교수
SCI101 과학 이교수
ENG101 영어 박교수

 

수강 정보 테이블은 학생과 수강하는 과목의 관계만을 표현하며, 과목 정보 테이블은 각 과목의 세부 정보를 관리한다.

이러한 분해는 각 테이블이 2NF를 만족하도록 하며, 데이터 중복을 줄이고 유지보수를 쉽게 할 수 있습니다.

 

아래 테이블은 정규화를 만족했을까?

결과 도출 : 1NF 는 만족하였다. 하지만 2NF 는 만족하였는가?

 

영화ID 제목 감독 이름 감독 주소 개봉일 장르
1 인셉션 크리스토퍼 놀란 LA 엘름 스트리트 1234번지 2010-07-16 공상 과학
2 다크 나이트 크리스토퍼 놀란 LA 엘름 스트리트 1234번지 2008-07-18 액션
3 타이타닉 제임스 카메론 NY 메이플 애비뉴 5678번지 1997-12-19 로맨스
4 아바타 제임스 카메론 NY 메이플 애비뉴 5678번지 2009-12-18 공상 과학
5 인터스텔라 크리스토퍼 논란 LA 엘름 스트리트 1234번지 2014-11-07 공상 과학

 

테이블은 감독 이름 감독 주소제목부분적으로 종속되어 있어 2정규화를 만족하지 못한다.

이는 각 감독에 대한 주소 정보가 반복되어 데이터 중복업데이트 이상을 처리할 수 있다.

예를 들어, 감독의 주소가 변경될 경우 여러 행을 수정해야 하는 문제가 발생한다.

 

2정규화를 만족하도록 테이블을 재설계

1. 영화 테이블 : 영화 관련 정보 저장

2. 감독 테이블 : 감독 관련 정보 저장

 

영화 테이블

ID 영화이름 개봉일 장르
1 인셉션 2010-07-16 공상 과학
2 다크 나이트 2008-07-18 액션
3 타이타닉 1997-12-19 로맨스
4 아바타 2009-12-18 공상 과학
5 인터스텔라 2014-11-07 공상 과학

 

 

 

 

감독 테이블

ID 감독이름 감독주소
1 크리스토퍼 놀란 LA 엘름 스트리트 1234번지
2 제임스 카메론 NY 메이플 애비뉴 5678번지

 

 

 

 

 

-- 조별 실습코드 
-- 영화에 관련된 데이터 베이스를 구축하자.
-- ex) 영화 제목, 개봉연도, 매출액, 평점, 관객수, 배우, 배우이름, 배우의정보, 영화에 누가 출연했는지
-- 영화, 배우, 출연 테이블을 만들어라 

 

테이블

영화 제목 개봉년도 매출액 평점 관객수 배우이름 배우나이  키
인셉션 2023-04-19 32,635,195,500 9.5 5000000 레오나르도 디카프리오 49 181
다크나이트 2023-11-15 47,644,838,000 9.65 4000000 크리스찬 베일 50 183
올드보이 2013-11-21 20,100,000,000 9.03 3000000 최민식 62 177
살인의추억 2023-11-08 68,800,000,000 9.3 5000000 송강호 57 180
기생충 2023-11-01 196,200,000,000 9.2 10000000 박소담  32 165

 

영화 테이블

ID 영화제목 매출액 평점 관객수
1 인셉션 32,635,195,500 9.5 5000000
2 다크나이트 47,644,838,000 9.65 4000000
3 올드보이 20,100,000,000 9.03 3000000
4 살인의추억 68,800,000,000 9.3 5000000
5 기생충 196,200,000,000 9.2 10000000

 

 

배우 테이블

ID 이름 나이
1 레오나르도 디카프리오 49 181
2 크리스찬 베일 50 183
3 최민식 62 177
4 송강호 57 180
5 박소담  32 165

 

출연 테이블

영화ID 배우ID 영화줄거리
1 1 ABCD
2 2 EEEEFF
3 3 GFGFGF
4 4 BNJGFGHT
5 5 ETRETRFDHD