차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
tech:데이터베이스_정규화 [2018/03/30 03:01] – 만듦 221.148.239.209 | tech:데이터베이스_정규화 [2018/03/30 08:12] (현재) – 221.148.239.209 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | {{tag> | + | {{tag> |
- | ====== 데이터베이스 정규화 ====== | + | ====== 데이터베이스 정규화 |
+ | 정규화는 데이터베이스의 자료에서 중복성 및 일치하지 않는 종속성을 제거하여 데이터베이스의 유연성을 높이는 동시에 데이터를 보호하도록 설계된 규칙에 따라 테이블을 만들고 해당 테이블 간의 관계를 설정하는 작업이다. | ||
- | 정규화는 | + | 데이터가 중복되면 디스크 공간이 낭비되며 유지 관리상의 문제가 발생함. 여러 위치에 있는 |
+ | 그렇다면 " | ||
- | 데이터가 중복되면 디스크 공간이 낭비되며 유지 관리상의 문제가 발생합니다. 여러 위치에 있는 데이터를 변경해야 하는 경우에는 모든 위치에서 데이터를 정확히 동일한 방식으로 변경해야 합니다. 고객 주소 데이터가 Customers 테이블에만 저장되어 있고 데이터베이스의 다른 위치에는 없다면 고객 주소 변경을 구현하기가 훨씬 쉬워질 것입니다. | + | 데이터베이스 정규화 예제로 간략하게 정규화에 대한 설명을 하겠다. |
- | + | ||
- | 그렇다면 " | + | |
- | + | ||
- | + | ||
- | 데이터베이스 정규화 예제로 간략하게 정규화에 대한 설명을 하겠습니다. | + | |
=====제1 정규화 ===== | =====제1 정규화 ===== | ||
- | 반복되는 필드가 없어야 | + | 반복되는 필드가 없어야 |
이름 암호 별명1 별명2 별명3 | 이름 암호 별명1 별명2 별명3 | ||
--------------------------------------------- | --------------------------------------------- | ||
줄 22: | 줄 19: | ||
D 15 오리 NULL NULL | D 15 오리 NULL NULL | ||
- | 위와 같이 이렇게 설계 하지 않고 다음처럼 | + | 위와 같이 이렇게 설계 하지 않고 다음처럼 |
이름 암호 | 이름 암호 | ||
줄 30: | 줄 27: | ||
C 14 | C 14 | ||
D 15 | D 15 | ||
- | | + | |
id 이름 별명 | id 이름 별명 | ||
--------------- | --------------- | ||
줄 40: | 줄 37: | ||
6 C 상식 | 6 C 상식 | ||
7 D 오리 | 7 D 오리 | ||
- | 이렇게 설계해야 | + | 이렇게 설계해야 |
=====제2 정규화===== | =====제2 정규화===== | ||
- | 중복되는 데이터를 분리해야 | + | 중복되는 데이터를 분리해야 |
사번 이름 부서 부서장 | 사번 이름 부서 부서장 | ||
줄 51: | 줄 48: | ||
10104 최길동 인사과 박부장 | 10104 최길동 인사과 박부장 | ||
- | 위와 같은 구조를 다음과 같이 설계합니다. | + | 위와 같은 구조를 다음과 같이 설계함. |
사번 이름 부서번호 | 사번 이름 부서번호 | ||
------------------------- | ------------------------- | ||
줄 58: | 줄 55: | ||
10103 박길동 2 | 10103 박길동 2 | ||
10104 최길동 2 | 10104 최길동 2 | ||
- | | + | |
부서번호 부서 부서장 | 부서번호 부서 부서장 | ||
-------------------------------- | -------------------------------- | ||
줄 64: | 줄 61: | ||
2 인사과 박부장 | 2 인사과 박부장 | ||
=====제3 정규화 ===== | =====제3 정규화 ===== | ||
- | 주 키에 의존적이지 않은 데이터를 분리합니다. | + | 주 키에 의존적이지 않은 데이터를 분리함. |
학번 이름 국어점수 국어타입 수학점수 수학타입 | 학번 이름 국어점수 국어타입 수학점수 수학타입 | ||
줄 70: | 줄 67: | ||
10101 홍길동 100 전공필수 80 교양선택 | 10101 홍길동 100 전공필수 80 교양선택 | ||
- | 위와 같은 구조를 다음과 같이 | + | 위와 같은 구조를 다음과 같이 |
학번 이름 | 학번 이름 | ||
------------------ | ------------------ | ||
줄 80: | 줄 77: | ||
국어 전공필수 | 국어 전공필수 | ||
영어 교양선택 | 영어 교양선택 | ||
- | 형태로 바꾸어 | + | 형태로 바꾸어 |
- | 정규화의 원칙 : More Table Less Column을 지향합니다. | + | 정규화의 원칙 : More Table Less Column을 지향함. |
- FK 이외에는 중복 컬럼을 허용하지 않아야 함. | - FK 이외에는 중복 컬럼을 허용하지 않아야 함. | ||
=> 이 원칙을 지킬 경우 JOIN의 횟수가 늘어날 가능성이 높으므로= | => 이 원칙을 지킬 경우 JOIN의 횟수가 늘어날 가능성이 높으므로= | ||
JOIN횟수를 줄이기 위해서 아주 많이 일어나는 Query의 속도를 빠르게 하기 위해 | JOIN횟수를 줄이기 위해서 아주 많이 일어나는 Query의 속도를 빠르게 하기 위해 | ||
- | 약간의 중복을 허용합니다. | + | 약간의 중복을 허용함. |
- | + | ||
- | + | ||
- | 정규화는 정규화 할 수록 테이블 조회 시 조인을 해야 하기때문에 성능이 떨어지는 부분이 있지만 보통 3정규화까는 합니다. | + | |
- | + | ||
- | =====반정규화===== | + | 정규화는 정규화 할 수록 테이블 조회 시 조인을 해야 하기때문에 성능이 떨어지는 부분이 있지만 보통 3정규화까는 함. |
+ | =====역정규화(Denormalization)===== | ||
http:// | http:// | ||