- [MySQL] 48. 정규화(3) -제 2 정규화(2NF)2024년 06월 13일
- Song hyun
- 작성자
- 2024.06.13.:45
728x90반응형[MySQL] 48. 정규화(3) -제 2 정규화(2NF)
1. 제 2 정규화 (Second Normal Form)
2. 제 2 정규화의 조건들3. 시나리오 코드
4. 예시 살펴보기
1. 제 2 정규화 (Second Normal Form)
: 1NF를 만족하며, 모든 비기본 키 속성이 전체 기본 키에 대해 완전 함수적 종속을 가져야 한다.
=> 즉, 기본 키의 일부에만 종속된 속성이 없어야 한다.
2. 제 2 정규화의 조건들
(1) 2NF의 조건을 만족하지 못하는 예시
학생ID 과목코드 과목명 담당교수 1 MAT101 수학 김교수 1 SCI101 과학 이교수 2 MAT101 수학 김교수 2 ENG101 영어 박교수 => 위 테이블에서 과목명/담당교수는 과목 코드에 부분적으로 종속되어 있다.
==> 즉, 학생 ID와는 직접적인 관련이 없기 때문에, 2NF의 조건을 위반하는 데이터의 예시라고 할 수 있다.
3. 시나리오 코드
(1) 수강정보 테이블을 생성한다.
-하지만 이는 부분적 종속을 포함하고 있고, 2NF를 위반하는 데이터의 형태이다.
->이 테이블을 2NF 정규화하려면?
use demo3; -- 복합키 생성 방법 확인 create table 수강정보( 학생ID int, 과목코드 varchar(10), 과목명 varchar(10), 담당교수 varchar(10), primary key(학생ID,과목코드) ); desc 수강정보;
(2) 수강정보 테이블을 2NF하기
-기존 수강정보 테이블을 분해해, 부분적 종속성을 제거할 수 있다.
-> 1. 학생 수강 정보 테이블: 학생 ID, 과목 코드
-> 2. 과목 정보 테이블: 과목 코드, 과목명, 담당교수
학생 ID 과목코드 1 MAT101 1 SCI101 2 MAT101 2 ENG101 과목코드 과목명 담당교수 MAT101 수학 김교수 SCI101 과학 이교수 ENG101 영어 박교수 * 학생 수강 정보 테이블(1)은 학생과 수강하는 과목의 관계만을 표현하며, 과목 정보 테이블은 각 과목의 세부 정보를 관리한다. 이런 분해는 각 테이블이 2NF 조건을 만족하게 하고, 데이터 중복을 줄이고 유지보수를 쉽게 할 수 있도록 만든다!
4. 예시 살펴보기:
아래의 테이블은 정규화를 만족했을까?
(1) 1NF(1정규화): O
(2) 2NF(2정규화): X
*정규화의 개념이 헷갈린다면, 하나의 정보를 수정해야 한다고 할 때 여러번 손이 가는지/아닌지를 따져보자.
-위의 테이블은 감독 이름/감독 주소가 제목에 부분적으로 종속되어 있어, 제 2정규화를 만족하지 못한다.
-감독의 주소 정보가 반복되어, 데이터 중복 및 업데이트 이상(Anomaly)을 초래할 수 있다. (ex: 감독의 주소가 변경될 경우, 여러 행을 수정해야 하는 문제가 생긴다.)
728x90반응형'MySQL > 응용 및 DB 접근' 카테고리의 다른 글
[MySQL] 50. 정규화(4) -제 3 정규화(3NF) (0) 2024.07.08 [MySQL] 49. 코드 예제: 제1,2정규화 실습하기 (0) 2024.06.13 [MySQL] 47. 정규화(2) -제 1 정규화(1NF) (0) 2024.06.13 [MySQL] 46. 서브 쿼리(3) (0) 2024.06.13 [MySQL] 45. 서브 쿼리 (2) (0) 2024.06.13 다음글이전글이전 글이 없습니다.댓글