본문 바로가기

DB

DB 면접 예상 질문) "제1,2,3정규화에 대해 설명해주세요."

정규화: 테이블 설계의 기반이 된다.

- 제1정규화: %LIKE% 안쓰고 WHERE 만 쓸 수 있도록 한 곳에는 데이터 하나만 존재

- 제2정규화: 테이블 당 주제와 거기에 맞는 속성만 갖고 있어야 한다. 그래야 데이터의 변화가 제한적으로 된다. 예를 들어, 회원 테이블이 있고 회원 테이블 당 가입한 프로그램 및 프로그램 가격을 갖고 있다면, 프로그램 가격이 수정되면, 회원 별 갖는 프로그램 가격을 수정해야 한다. 그것보다 회원 테이블에는 회원별 가입한 프로그램만 기록해놓고, 프로그램 테이블을 따로 만들어 프로그램 가격 수정 시 딱 그 프로그램에 해당하는 가격만 수정하면 된다.

- 제2정규화 (다른말): partial dependency가 있을 때. composite primary key가 있을 때, 일부 속성들이 composite primary key의 한 key에만 의존 할 때. composite primary key 테이블인데, 한 primary key만 의존하면 안된다. 그럼 데이터 수정 시 불필요한 중복이 발생한다.

- 제3정규화: primary key 속성에 종속적이지 않고, 일반 속성에 종속적인 속성이 있다면, 그 일반 속성을 primary key 로 빼서 새로운 테이블을 만든다. 예) 프로그램 테이블에 프로그램 강사가 있고 강사 출신 대학이 있으면, 강사 출신 대학은 강사에 의존하니 차라히 강사라는 테이블을 따로 만든다.

- 제3정규화는 제2정규화를 만족한다.

 

정규화 장점:

- 제2정규화: 데이터 변경 시 종속적인 데이터가 한 곳으로 준다.

- 제3정규화: 데이터 변경 시 종속적인 데이터가 한 곳으로 준다.

 

정규화 단점:

- 제2정규화: JOIN이 필요함. 예) 회원 별 프로그램 수강료 총합.

- 제3정규화: JOIN이 필요함. 예) 특정 프로그램 강사의 출신대학.

 

느낀점:

- 정규화를 잘해두면, 디스크 쓰기를 최소화 할 수 있다. (제2정규화)