정규화 (필수)
1차 정규화 -> 1차 정규형
2차 정규화 -> 2차 정규형
3차 정규화 -> 3차 정규형
2차 정규화 : 1차 정규화를 만족하는 테이블이다.
1차 정규형 : 한 속성에 한 속성값.
2차 정규형 : 주식별자에 의해 모든 속성이 종속.
3차 정규형 : 일반속성 간에 함수종속이 없는 상태.
1. 정규화(DB Normalization)
일정한 규칙에 따라 변형하여 이용하기 쉽게 만드는 일
정규형에 맞게 고치는 과정
2. 이상현상
- 삽입이상 : 삽입 시 지정되지 않은 속성 값이 null이 됨
- 갱신이상 : 갱신 시 일부가 일관성 유지가 안됨
- 삭제이상 : 원하지 않는 연쇄 삭제 발생
3. 함수적 종속성
- 완전 함수적 종속성 : 식별자 속성 전체가 일반 속성 결정
- 부분 : 복합식별자 일부가 일반 속성 결정
- 이행 : 일반 속성이 일반 속성 결정
- 결정자 : 후보키가 아닌 결정자 존재
1차 정규화 필요
2차 정규화 필요 = 부분 함수적 종속을 가진 상태
3차 정규화 필요 = 이행 함수적 종속을 가진 상태
ex) 보이스코드 정규화 필요 = 결정자 함수적 종속
4. 정규화 단계 (3차까지 필수)
- 1차 정규화 : 한 속성에 한 속성값 확보
- 2차 정규화 : 한 PK에 일반 속성 결정되도록. 부분함수 종속 제거
- 3차 정규화 : 일반 속성 간 종속성 제거되도록. 이행함수 종속 제거
- BCNF(Boyce-Codd Normal Form) : 후보키가 기본키 종속성 제거되도록. 결정자 함수 종속 제거
- 4차 정규화 : 여러 칼럼이 하나의 칼럼 종속하지 않도록
- 5차 정규화 : 조인에 의한 종속성 발생하지 않도록

강사님 정리 참고
5. 정규화 주의사항
- 모든 정규화는 이전 정규화를 만족해야함
- 단일 테이블 조회 시 데이터중복이 제거되어 성능이 향상- 된다
정규화 이후 조인이 많아지면 조회 성능이 저하될 수 있다
6. 반정규화
- 데이터베이스 성능 향상을 위해 데이터 중복 허용하는 것
- 정규화했을 때 성능이 오히려 저하되는 경우 실행한다
!. 일반적으로는 정규화하면 성능 좋아진다. (O)
!. 정규화하면 성능이 '무조건' 좋아진다. (X)
계층형 데이터 모델
- 한 테이블 (상사 - 부하) 계층이 모두 있는 모델.
트랙잭션
- all or nothing -> 분리될 수 없는 업무단위
트랙잭션 특징
- 원자성 : 업무는 모두 성공 또는 모두 실패
- 일관성 : 실행 전후 내용에 잘못이 없어야함
- 고립성 : 트랜잭션 실행 도중 다른 트랜잭션 접근 불가
- 영속성 : 트랜잭션이 성공적으로 수행하면 내용은 영구 저장됨
Null 속성
- 아직 정해지지 않은 값
- 0이 아니다.
- 공백 아니다
- is null로 체크가능
- null 포함 연산하면 null 나온다.
- 집계함수 null 제외
식별자
- 본질식별자 : 업무에 의해 생성 (주문상품)
- 인조식별자 : 본질 식별자가 너무 복잡해서인위적으로 생성, 없어도 됨 (주문상품번호)
- 단점 : 중복 데이터 발생, 불필요한 인덱스 생성