정규화란?
- 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.
- 데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
- 일반적으로 정규화를 수행해야 데이터처리의 성능이 향상되며 데이터의 조회처리 트랜잭션시에 성능저하가 나타날 수 있음.
- 데이터를 원자적으로 만드는 것이 테이블을 정규화 하는 첫 단계이다.
Therefore
- 일반적으로 정구화가 잘 되어있으면 입력/수정/삭제의 성능이 향상되고 반정규화를 하면 조회의 성능이 향상된다고 인식 할 수 있다.
- but! 데이터 모델링을 할 때 반정구화만이 조회 성능을 향상시킨다는 고정관념은 탈피시켜야합니다!
정규화테이블의 이점
-> 정규 테이블은 중복데이터가 없어서 데이터베이스의 크기를 줄여준다.
-> 찾아야할 데이터가 적어 쿼리가 더 빨라진다.
정규화 단계
-> 1 정규화
= 각 행의 데이터들은 원자적 값을 가져야 한다.
= 각 행은 유일무이한 식별자인 기본키(Primary Key)를 가지고 있어야 한다.
= 예시 테이블
id |
last_name |
first_name |
nick_name |
1 |
elisworth |
kim |
kim |
2 |
brown |
john |
john |
3 |
brown |
john |
john |
4 |
pertrillo |
maria |
maria |
5 |
franken |
esme |
em |
= id 열이 없다면 john brown의 레코드는 두 개가 있다. 하지만 이 경우 두 명의 다른 사람을 나타낸다. 왜? id열을 사용하여 두 레코드를 유일무이하게 하였기 때문에이다.
-> 2 정규화
= 1 정규화이어야 한다.
= 부분적 함수 의존이 없다.
-> 3 정규화
= 2 정규화이어야 한다.
= 이행적 종속이 없어야 한다.
함수적 종속성
-> 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것.
-> 이때 기준값을 결정자라 하고 종속되는 값을 종속자라 한다.
-> 종속자는 근본적으로 결정자에 함수적으로 종속성을 가지고 있다.
여기서 이름, 출생지, 호주라는 속성은 주민등록번호 속성에 종속된다.
Therefore. 주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다.
-> 함수의 종속성은 데이터가 가지고 있는 근본적인 속성으로 인식되고 있다.
-> 기본적으로 데이터는 속성간의 함수종속성에 근거하여 정규화되어야 한다.
'IT > SQLD(SQL개발자)' 카테고리의 다른 글
[SQLD] 대량 데이터에 따른 성능 (0) | 2019.06.18 |
---|---|
[SQLD] 반정규화와 성능 (0) | 2019.06.17 |
[SQLD] 성능 데이터 모델링의 개요 (0) | 2019.06.15 |
[SQLD] 데이터 모델링관점과 분류 (0) | 2019.06.13 |
[SQLD] 식별 (0) | 2019.06.11 |