정규화
- 이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
함수적 종속성
- 속성들 간의 관련성
- 함수 종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상현상이 발행하지 않는 릴레이션으로 만들어가는 과정
완전 함수 종속
- 릴레이션에서 속성 집합 Y가 속성집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체에 종속되어 있음
- 일반적으로 함수 종속은 완전 함수 종속을 의미함
부분 함수 종속
- 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
정규형 분류
제 1차 정규형(1NF)
- 릴레이션의 모든 속성이 더는 분해되지 않는 원자값이어야 함
제 2차 정규형(2NF)
- 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이어야 함
제 3차 정규형(3NF)
- 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않음
보이스코드 정규형(BCNF)
- 릴레이션이 제 3 정규형에 속하고, 릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키인 릴레이션
제 4 정규형
- 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속을 제거한 릴레이션
제 5 정규형
- 릴레이션이 제 4 정규형을 만족하면서, 후보키를 통하지 않는 조인 종속을 제거한 릴레이션
정규화 시 주의사항
- 모든 릴레이션이 제 5 정규형에 속해야만 바람직한 것은 아님
- 정규화를 많이 거칠 수록 중복은 줄일 수 있으나 성능에 영향을 미침 (조인 연산)
- 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많음
반정규화(역정규화)
- 의도적으로 정규화 원칙을 위배하는 행위로 데이터베이스 성능향상을 위해, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능향상방법
서브쿼리
- 하나의 SQL 문에 포함되어 있는 또 다른 SQL문
- 서브쿼리는 괄호를 감싸서 작성한다
- 서브쿼리는 단일 행 또는 복수 행 비교 시 그에 맞는 연산자와 함께 사용한다
- 서브쿼리에서는 order by를 사용하지 못한다. (데이터 반환이 목적이지 정렬은 의미없다) but, MySQL에서는 지원함
서브쿼리의 종류
- 스칼라 서브쿼리 : SELECT절에 있는 서브쿼리 (단일행만 반환)
- 인라인 뷰 : FROM절에 있는 서브쿼리
- 서브쿼리 : WHERE절에 있는 서브쿼리
'DB > MySql' 카테고리의 다른 글
| 09.13 날짜 함수, 세션 변수, JOIN (0) | 2024.09.13 |
|---|---|
| 09.12 집계 함수, group by, having, 윈도우 함수, 내장 함수, 제어 흐름 (0) | 2024.09.12 |
| 08.29 DML select, insert, update, delete문 (0) | 2024.09.09 |
| 08.28 DDL create, drop, grant, revoke 문 (0) | 2024.09.09 |