hongcheol / CS-study

cs지식을 정리하는 공간
MIT License
248 stars 30 forks source link

[면접 질문] 정규화, 인덱스 #143

Open lksa4e opened 3 years ago

lksa4e commented 3 years ago

(질문 받은 곳 - IT 서비스)

[면접 질문] 정규화, 인덱스

1. 정규화에 대해 아는 것을 이야기해주세요

데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법을 의미하며, 데이터를 분해하는 방법에 따라 정규화 단계가 나누어지게 된다.

정규화의 목적

[제1 정규화]

image

현재 테이블은 전화번호를 여러개 가지고 있어 원자값이 아니다. 따라서 1NF에 맞추기 위해서는 아래와 같이 분리할 수 있다.

image

[제2 정규화]

image

이 테이블에서 기본키는 (학생번호, 강좌이름)으로 복합키이다. 그리고 (학생번호, 강좌이름)인 기본키는 성적을 결정하고 있다. (학생번호, 강좌이름) --> (성적) 그런데 여기서 강의실이라는 컬럼은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다. (강좌이름) --> (강의실) 즉, 기본키(학생번호, 강좌이름)의 부분키인 강좌이름이 결정자이기 때문에 위의 테이블의 경우 다음과 같이 기존의 테이블에서 강의실을 분해하여 별도의 테이블로 관리하여 제2 정규형을 만족시킬 수 있다.

image

[제 3 정규화]

아래의 두가지 조건을 만족해야 한다.

image 현재 테이블에서는 Tournament와 Year이 기본키다. Winner는 이 두 복합키를 통해 결정된다. 하지만 Winner Date of Birth는 기본키가 아닌 Winner에 의해 결정되고 있다. 따라서 이는 3NF를 위반하고 있으므로 아래와 같이 분리해야 한다.

image

[참고 from 윤환님]

비공식적으로는 3NF가 되었으면 정규화되었다고 말할 수 있으며, 실제 현업에서도 제 3NF 정도까지만 수행하고 속도, 튜딩 등 필요에 따라 비정규화(Denormalization) 과정을 수행하기도 한다.

2. 인덱스가 무엇인지? + 사용하는 이유 / 적은 수의 레코드에 많은 인덱스를 사용하는 상황에서 발생할 수 있는 문제점

인덱스

인덱스의 목적

인덱스의 장단점

장점

단점