본문 바로가기
Database

[DB] 데이터 베이스 정규화

728x90
반응형

🎲 데이터 정규화란?

    데이터 정규화는 데이터의 중복을 최소화되도록 테이블의 구조를 변경하는 것을 일컫는 말입니다. 정규화를 통해서 방대한 양의 데이터를 보다 효율적이고 체계적으로 관리하는 것을 목표로 시행합니다.

 

 

🍳 제 1 정규화 (1NF)

    제 1정규화에서는 데이터들이 한컬럼에 하나 씩만 들어가도록 조정합니다. 하나의 컬럼에 두 개 이상의 데이터가 들어갈 경우 데이터를 조회하고 수정하는데 비효율적이기 때문입니다.

 

🍳제 2 정규화 (2NF)

    DB에서는 데이터의 키값 역할을 하는 PK(Primary Key)와 벨류 역할을 하는 일반 컬럼들이 있다. 헌데 아래의 테이블에서는 학생 & 수업과목 이 복합키 역할을 해서 이에 따라 성적의 값이 결정되지만, 강의실의 경우 학생과는 상관없이 수업과목에 의해서만 값이 결정된다. 이러한 상황에서 강의실 데이터를 다른 테이블로 빼주는 것을 제 2 정규화라고 한다.

제2정규화 전
제2정규화 후

 

🍳 제 3 정규화 (3NF)

    제 3정규형는 제 2 정규화를 끝낸 후에 이행적 종속을 없애는 것이다. 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미한다. 이러한 이행적 종속이 문제가 되는 이유는 A->B->C관계가 한 테이블에 정의 되어있을 때, B->C관계가 중복으로 선언 되어 있을 수 있는데 B->C의 관계가 변경 될 때, 중복되는 관계가 있는지 모두 검사를 해주어야한다. 하지만, A->B 와 B->C로 테이블을 나누어둘 경우 중복검사를 해주지 않아도 된다.

제 3정규화 전
제 3정규화 후

 

🍳 BCNF

    아래의 테이블 같은 경우 교수가 수업과목을 결정하는 결정자역할을 하지만 정작 테이블의 후보키에는 들어가지 않는다. 이로인해 생길 수 있는 문제들은 첫째로 교수의 수업이 추가되더라도 수강생이 생기기 전까지는 데이터를 추가할 수 가 없다. 그리고 두번째로는 한과목의 모든학생들이 수강을 취소할경우 교수->수업과목 데이터도 함계 삭제된다. 마지막으로는 교수가 수업과목을 변경할경우 모든학생의 수업과목을 변경해주어야하기 때문에 비효율적이다. 

BCNF 정규화 전
BCNF 정규화 후

반응형

'Database' 카테고리의 다른 글

[DB] SQL문의 종류 (DML, DDL, DCL, TCL)  (0) 2022.12.11