2024.07.17 - [컴퓨터 공학/Networks] - SK networks AI Camp - 데이터 모델링 & ERD
데이터 베이스 정규화
: 데이터의 중복을 최소화하게 데이터를 구조화하는 프로세스
○ 목표
: 이상이 있는 관계를 재구성해서 작고 잘 조직된 관계를 생성하는 것
○ 목적
: 불필요한 데이터를 제거하고, 데이터 중복을 최소화하여 저장공간, 자원을 효율적으로 사용하기 위함
삽입/갱신/삭제 시 발생할 수 있는 이상 현상을 방지하기 위함
○ 과정
아래 사진과 같이 진행되며 보통 1NF ~ 3NF까지 진행하거나 BCNF단계까지 진행
● 제 1정규형
: 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
● 제 2정규형
: 제 1정규형을 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
* 완전 함수종속 : 기본키의 부분집합이 결정자가 되어서는 안되는 것
<아래 테이블 기준>
기본키 : (학생번호, 강좌이름) ← 복합키
성적이 기본키를 결정 ==> (학생번호, 강좌이름) → (성적)
강의실이라는 칼럼은 기본키의 부분집합인 '강좌이름'에 의해 결정될 수 있음 ==> (강좌이름) → (강의실)
● 제 3정규형
: 제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해한 것
* 이행적 종속 : A → B, B → C가 성립할 때 A → C가 성립되는 것
기존 테이블에서 (학생번호)는 (강좌 이름)을 결정하고있고, (강좌이름)은 (수강료)를 결정
그렇기 때문에 이를 (학생번호, 강좌이름) 테이블과 (강좌이름, 수강료) 테이블로 아래와 같이 분해해야 한다.
● BCNF 정규화
: 제3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
특강 수강 테이블에서 기본키 : (학생번호, 특강이름)
기본키는 (교수)를 결정, (교수)는 (특강이름)을 결정
하지만 여기서 문제는 (교수)가 (특강이름)을 결정하는 결정자이지만, 후보키가 아니다.
따라서 BCNF 정규화를 만족시키기 위해 위의 테이블을 아래와 같이 (특강신청)테이블과 (특강교수)테이블로 분해
'Networks > MySQL&DB' 카테고리의 다른 글
SK networks AI Camp - DB 명령어 (2) | 2024.07.20 |
---|---|
SK networks AI Camp - MySQL & DBeaver설치 (0) | 2024.07.19 |
SK networks AI Camp - 데이터 모델링 & ERD (1) | 2024.07.18 |
SK networks AI Camp - MySQL (0) | 2024.07.18 |