Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- KDT
- 오픈패스
- UXUI챌린지
- Spring
- 오픈챌린지
- 객체지향
- OPENPATH
- 국비지원교육
- 오블완
- 자바
- 디자인강의
- UXUIPrimary
- Be
- JPA
- 백엔드개발자
- mysql
- Java
- 디자인챌린지
- baekjoon
- UXUI기초정복
- 디자인교육
- 내일배움카드
- 국비지원
- 국비지원취업
- 환급챌린지
- 백준
- 백엔드 부트캠프
- 티스토리챌린지
- 패스트캠퍼스
- 부트캠프
Archives
- Today
- Total
군만두의 IT 개발 일지
[SQLD] 데이터 모델링의 이해 - 정규화 본문
목차
1. 정규화
- 정규화(Normalization): 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 입력/수정/삭제 이상 현상을 제거하는 것
- 정규화의 필요성:
- 데이터베이스에서 데이터의 중복을 줄이고, 데이터를 구조화함으로써 데이터의 일관성과 무결성을 보장한다.
- 테이블을 더 작고 관리하기 쉬운 여러 테이블로 분리한다. 이를 통해 이상 현상(Anomalies)을 방지한다.
- 정규화 형태(Normal Forms):
- 제1정규형(1NF): 모든 속성은 하나의 값만을 가져야 하며, 테이블에 중복된 데이터가 없어야 한다.
- 제2정규형(2NF): 제1정규형을 만족하며, 기본 키의 부분적 종속성이 제거되어 기본 키 전체에 종속되어야 한다.
- 제3정규형(3NF): 제2정규형을 만족하며, 모든 비주요 속성이 모든 주식별자에만 종속되고 비주요 속성 간의 종속성이 없어야 한다.
- 보이스/코드 정규형(BCNF): 제3정규형을 만족하며, 모든 결정자가 후보키 집합에 속해야 한다.
- 제4정규형(4NF): 제3정규형을 만족하며, 모든 다치 종속성이 후보 키를 통해서만 존재하는 상태로, 데이터 중복과 이상 현상을 제거해야 한다. (BCNF에서 해결할 수 없는 다치 종속으로 인한 문제를 해결한다.)
- 제5정규형(5NF): 제4정규형을 만족하며, 모든 조인 종속이 후보 키를 통해서만 존재하는 상태로, 데이터 중복과 이상 현상을 제거해야 한다.
- ※ 암기를 할 때, 두부이걸다줘(도부이결다조: 도메인이 원자값, 부분적 함수 종속 제거, 이행적 함수 종속 제거, 결정자이면서 후보키가 아닌 것 제, 다치 종속 제거, 조인 종속성 이용)으로 외운다. BCNF, 제4정규형, 제5정규형은 가볍게 살펴본다.



2. 반정규화
- 반정규화(Denomalization): 데이터베이스 설계 과정에서 정규화의 원칙을 일부 또는 전부 역행하여, 데이터의 중복을 의도적으로 허용하거나 테이블 구조를 단순화하는 과정
- 반정규화의 필요성:
- 정규화된 테이블을 조인하는 것보다 하나의 테이블에서 데이터를 읽는 것이 더 빠를 수 있다.
- 여러 테이블에 걸친 데이터를 조인 없이 접근할 수 있어 쿼리를 단순화할 수 있다.
- 데이터를 한 곳에 집중시키면 트랜잭션 처리 시간이 줄어든다.
- 반정규화 방법:
- 서로 관련된 여러 테이블을 하나로 합쳐서 관리함으로써 쿼리의 조인 연산을 줄인다.
- 자주 접근하는 데이터를 여러 테이블에 중복 저장함으로써 데이터 접근 시간을 단축한다.
- 집계 함수를 사용해 조회하는 데이터를 사전에 계산하여 별도의 테이블에 저장하여 집계 쿼리의 실행 시간을 줄여준다.
SQL 쿼리의 실행 순서
- 5단계: SELECT 요리이름, COUNT(*) as 주문수 → 최종 결과 테이블의 칼럼을 만들거나 선택
- 1단계: FROM 주문내역 → 테이블에서 데이터 가져오기
- 2단계: WHERE 날짜 = '2024-07-22' → 조건에 맞는 행 선택
- 3단계: GROUP BY 요리이름 → 같은 종류끼리 그룹화
- 4단계: HAVING COUNT(*) > 5 → 그룹 중 조건에 맞는 것 선택
- 6단계: ORDER BY 주문수 DESC; → 최종 결과 테이블의 칼럼을 오름차순, 내림차순으로 정렬
※ SQL 쿼리는 셀프웨구해오로 주로 외운다.
'학습일지 > 데이터베이스' 카테고리의 다른 글
| [스터디] 02. 테이블 디자인 작업 (0) | 2025.10.04 |
|---|---|
| [스터디12] 01. SQL 시작하기 - MySQL (0) | 2025.09.16 |
| [스터디] 20. 실행 계획 분석 (1) | 2024.11.23 |
| [스터디] 19. 실행 계획 (0) | 2024.11.22 |
| [스터디] 18. 쿼리 힌트 (1) | 2024.11.21 |
Comments