일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘공부
- 재테크
- C++
- 돈
- 프로그래머스 알고리즘 공부
- 경제
- algorithmTest
- algorithmtraining
- 독서
- 책알남
- 지혜를가진흑곰
- 서평
- 알고리즘 공부
- 백준알고리즘
- 프로그래밍언어
- 화장품
- 다독
- 자바스크립트
- 주식
- Java
- JavaScript
- 책을알려주는남자
- 자바
- 알고리즘트레이닝
- C
- 성분
- algorithmStudy
- 투자
- 채권
- 독후감
- Today
- Total
탁월함은 어떻게 나오는가?
SQL 정규화(Normalization) 그리고 정규형 종류와 반(역)정규화에 대해서 알아보자 본문
SQL 정규화(Normalization) 그리고 정규형 종류와 반(역)정규화에 대해서 알아보자
Snow-ball 2022. 5. 29. 23:04정규화란?
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스를 정규화라고 부른다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 일반적으로 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다.
데이터베이스 디자인의 표준은 데이터베이스가 완전히 정규화되게 디자인 되어야 한다. 그 뒤 일부는 성능상의 이유로 비정규화될 수 있다.
정규화된 결과를 정규형이라고 하며, 정규형은 기본 정규형 고급 정규형으로 나뉜다.
- 기본 정규형 : 제1정규형, 제2정규형, 제3정규형, BCNF(보이스/코드 정규형)
- 고급 정규형 : 제4정규형, 제5정규형
정규화의 장점으로는 이상 현상의 발생 가능성을 줄이지만, 단점으로는 연산 시간이 증가한다.
데이터베이스 정규화의 목적은 2가지이다.
1. 불필요한 데이터 (data redundancy)를 제거한다.
2. 데이터 저장을 "논리적으로" 한다.
제 1 정규형 (1NF;)
테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.
결국 "중복되는 항목이 없다"라는 건데 학자마다 주장이 조금씩 달라서, 1NF를 만족하는 테이블에 대해서의 정확한 정의는 없다.
제 2 정규형 (2NF;)
제2 정규형란 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
제 3 정규형 (3NF; )
제 3정규형란 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미한다.
BCNF 정규화
BCNF 정규형란 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
제 4정규형
릴레이션이 BCNF를 만족하면서, 함수 종속이 아닌 다치 종속(MVD: Multi Valued Dependency)를 제거해야 만족할 수 있다.
제 5정규형
릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속(JD: Join Dependency)을 제거해야 만족할 수 있다.
반정규화(역정규화)
역정규화(denormalization)는 이전에 정규화된 데이터베이스에서 성능을 개선하기 위해 사용되는 전략이다. 즉, 많은 Join으로 인한 DB설계와 쿼리로 요청을 처리하는 시간이 증가하는 '비용(Cost)'가 문제이다. 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다. 아주 많은 수의 읽기 작업을 처리할 필요가 있는 관계형 데이터베이스 소프트웨어의 성능이나 스케일링에서 고려된다. 역정규화는 비정규화(unnomalized form)와는 구별된다. 데이터베이스/테이블은 이들을 효율적으로 역정규화 하기 위해 우선 정규화되어야 한다.
'[Snow-ball]프로그래밍(컴퓨터) > DATABASE' 카테고리의 다른 글
데이터베이스 이중화 서비스에 대한 고민 및 적용 사례 (1) | 2024.11.18 |
---|---|
[PSQL] DataBase 에 index 를 사용하면 과연 더 빠를까? 직접 테스트를 진행해보자 (0) | 2023.04.27 |
[DATABASE] 참조무결성과 CASCADE 그리고 외래키(Foreign Key)그리고 옵션 지정방법에 대해서 알아보자 (0) | 2022.12.11 |
Mysql 에서 Limit/Offset 을 사용하면 Order By 느려지는 이유는 무엇일까? (0) | 2022.08.17 |
MYSQL을 리눅스(linux) 터미널로 설치하는 방법 (0) | 2021.02.18 |