정규화 : 이상 현상을 막기 위함.
테이블에 데이터를 삽입/변경/삭제할 때 발생하는 이상 현상들을 막기 위해 재설계하는 것
1차 정규화 : 원자값으로 구성
한 user에 있는 정보가 여러 개 있을 때, 그 정보를 수정하려면 기존 값에서
변경된 것을 찾아서 바꿔줘야 하는 번거로움이 있다.
이를 방지하기 위해 각각 row 하나로 분리한다.
A -> a, b
A -> a
A -> b 이런식으로
2차 정규화 : 부분함수 종속 제거
부분적으로 연관되어 있는 값을 나누는 것.
A, B -> C와 연관이 있고, 또 A, B -> D와 연관이 있을 수 있는데 이를 나누는 것을 말한다.
A, B -> C / B -> D 이런식으로
3차 정규화 : 이행함수 종속 제거
A -> B, B -> C 으로 A -> C (삼단논법?) 가 되는 경우를 나누는 것을 말한다.
만약 B가 바뀐다면 C도 바꿔야 하므로 이 경우 자체를 만들지 않기 위함이다.
보이스-코드 정규화 : BCNF
결정자 함수이면서 후보키가 아닌 것을 제거.
결정자이지만 중복이 가능하다는것은 키로써 역할을 못 한다는 것.
즉, 후보키가 될 수 없다는 것이다.
(A와 C는 한 그룹) A -> B -> C를
A, C / B -> C 로 나눈다
4차 정규화 : 다치(다중값) 종속 제거
새로운 row를 추가하려면, 다른 column에도 값을 추가 해 줘야 한다.
이를 방지하기 위해 테이블을 나누는 것.
5차 정규화 : 조인 종속성 제거
조인 종속성 : 4차 정규화가 된 테이블들을 Join 시켰을 때, 정규화 이전의 table과 값이 달라지는 경우
이를 원래의 값이 나오도록 테이블을 나누는 것.
기본키 : 관계형 데이터베이스에서 각 레코드(행)를 고유하게 식별하는 데 사용되는 열(또는 속성).
외래키 : 한 테이블의 기본 키(또는 후보 키)가 다른 테이블의 일반 열로 사용되는 경우.
1:1은 (남자 - 결혼 - 여자)
1:N : 부모 테이블의 PK를 자식 테이블에 FK로 집어 넣어 관계를 표현한다.(부모 - 가족 - 자식)
N:M : 서로가 서로를 1:N 관계로 보고 있는 것이다. 서로의 PK를 자신의 외래키 컬럼으로 갖고 있으면 된다.
(학원 - 강의 - 수강생)