정규화를 하지 않아 발생하는 현상(삽입, 갱신, 삭제 이상)
삽입 이상
갱신 이상
삭제 이상
💡특징
- 논리 데이터 모델링 수행 시점에 고려
- 데이터 일관성, 최소한의 중복, 데이터 유연성 확보가 목적
- 제 1 정규화 ~ 제 5 정규화까지 존재 (보통, 제 3 정규화까지 진행)
테이블 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성) 을 갖도록 테이블을 분해하는 단계
제 1 정규화를 만족하지 않는 테이블

제 1 정규화를 만족하는 테이블

하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행을 분리하는 단계
제 1 정규화를 진행한 테이블에 완전 함수 종속을 만들도록 테이블을 분해하는 단계
제 2 정규화를 만족하기 않는 테이블

제 2 정규화를 만족하는 테이블



💡완전 함수 종속
- 기본키의 부분 집합이 결정자가 되어선 안된다는 것을 의미
- PK가 2개 이상 일 때 발생, PK의 일부와 종속되는 관계가 있을 때 분리
제 2 정규화를 진행한 테이블에 이행적 종속을 없애도록 테이블을 분리하는 단계
제 3 정규화를 만족하지 않는 테이블

제 3 정규화를 만족하는 테이블

💡이행적 종속
- A → B, B → C의 관계가 성립할 때, A → C가 성립되는 것
- (보통 A가 PK) (A, B) (B, C)로 분리하는 것이 정규화
존재에 의한 관계 - 두 엔터티 사이의 소유, 분류 등 존재에 의해 발생
행위에 의한 관계 - 두 엔터티 사이 행위나 사건에 의해 발생
💡하나의 흐름으로 전부 전송하거나 전부 실패 (트랜잭션의 특성 - 원자성)
| 이름 | 잔액 | 대출 |
|---|---|---|
| 김민수 | 10000 | Null |
| 박철수 | 500 | -1000 |
SELECT 이름, 잔액 + 대출
FROM 금융
| 이름 | 잔액 + 대출 |
|---|---|
| 김민수 | Null |
| 박철수 | -500 |
SELECT 이름, 잔액+NVL(대출, 0)
FROM 금융
| 이름 | 잔액 + 대출 |
|---|---|
| 김민수 | 10000 |
| 박철수 | -500 |
💡NVL(C, 0)
컬럼 C에 NULL값은 0으로 치환럼 C에 NULL값은 0으로 치환
| 이름 | 잔액 | 대출 |
|---|---|---|
| 김민수 | 10000 | Null |
| 박철수 | 500 | -1000 |
| 이영희 | 5000 | -500 |
SELECT COUNT(*), COUNT(잔액), COUNT(대출)
FROM 금융
| COUNT(*) | COUNT(잔액) | COUNT(대출) |
|---|---|---|
| 3 | 3 | 2 |
- count(*)
모든 컬럼이 NULL이면 제외 (그럴수가 없음)- COUNT(잔액)
잔액이 NULL이면 제외- COUNT(대출)
대출이 NULL이면 제외