
이러한 테이블이 있었는데 김민수 라는 사람이 다음 날
'골프초급'을 수강신청했다.

이렇게 해놓으면 나중에 성능이슈가 생길 수 있고
한 칸에 많은 정보를 저장해두면 한 칸에서 일부만 찾거나 수정하거나 삭제하는 작업이 느려진다.

그래서 이렇게 만드는 것이 낫다.
제 1정규화은 하나의 셀 안에 하나의 데이터만 보관하는 것을 말한다. 즉, 제 1정규형이 되었다.
이렇게 해두면 성능문제도 없어지고 나중에 다른 컬럼을 추가할 때도 문제가 생기지 않는다.

제 1정규화를 해놓은 테이블이다.
만약 헬스 비용이 올라서 6,000원에서 7,000원으로 가격을 바꾸어 주어야한다면, 두 행의 가격을 수정해주면된다.
하지만 만약 헬스를 수강하는 사람이 2명이 아닌 100명이라면 하나하나 가격을 바꾸기 매우 번거롭다.
이러한 번거로움이 발생하지 않으려면 제 2정규형을 만족시키면된다.

가격 컬럼은 수강등록현황 테이블과 관련이 없기 때문에 가격 컬럼만 잘라내 새로운 테이블을 만들어 추가해주었다. 이러한 과정을 제 2정규화라고 하고 테이블은 제 2정규형이 되었다.
composition primary key는 두개 이상의 컬럼을 합친 primary key를 말한다.

위의 테이블에서는 '회원번호+프로그램' 이렇게 조합해야 primary key 역할을 수행할 수 있다.
'회원번호' 만으로 primary key 역할 불가능
'프로그램' 만으로 primary key 역할 불가능
근데 두 개 합치면 primary key 가능 -> composition primary key
composition primary key 중에 하나의 컬럼에만 종속되어있는 컬럼을 말한다.

위의 테이블을 보면 가격 컬럼은 프로그램에 따라서 결정될 뿐 회원번호와는 관련이 없다.
따라서 가격 컬럼은 partial dependency가 있다고 표현한다.
즉, composition primary key 중 하나에 종속되어있는 partial dependency가 있는 컬럼을 다른 테이블로 뺴는 작업이다.