- 정규화 - 함수적 종속성을 근거로 진행
*함수적 종속성 - x가 변화하면 y가 변화한다 => x는 y를 함수적으로 종속한다.
ex) 회원아이디(pk) 변경시 회원 이름도 변경
목적 - 데이터의 일관성, 데이터 중복 최소화, 데이터 유연성 최대화를 위한 데이터 분해
비지니스에 변화가 있더라도 데이터 모델의 변경을 최소화
1~5정규화까지 있으나 대체적으로 3정규화를 넘기지 않음
정규화를 하지 않으면 불필요한 데이터의 입력 - (Anomaly)문제가 발생
분해를 하더라도 join을 통해서 다시 합쳐서 볼 수 있음
- 제1정규화
완전한 함수 종속성을 이룰 수 있는 pk를 지정
이때 pk는 2개 이상이여도 됨
*Account -> AccountName and Money
ID -> name
- 제2정규화
pk가 2개 이상인 테이블에 대해서만 이루어짐 (부분 함수 종속성 발생)
해당 pk에 대해서 새로운 테이블로 도출
*table1에서 ID와 Name을 따로 도출
- 제3정규화
*이행 함수 종속성 - pk를 제외하고 열간에 종속성이 발생하는 경우
- 삼단논법으로 생각 x->y, y->z => x->z 해당경우 x,y y,z두개의 테이블로 분해
1,2정규화를 수행 후에 해야 함
- BCNF
복수의 후보키가 있고 후보키들이 복합 속성, 서로 중첩되어야 할 경우 테이블 분해
일반 열이 후보키를 결정하는 경우
정규화 절차 | 설명 |
제1정규화 | Attribute의 원자성 확보 pk지정 |
제2정규화 | pk가 2개 이상의 Attribute로 이루어 진 경우 부분함수 종속성 제거 |
제3정규화 | pk를 제외한 열간에 종속성 제거 - 이행 함수 종속성 |
BCNF | 후보키가 있는 경우 후보키가 pk를 종속시키면 분해 |
제4정규화 | 다중값 종속성 제거 |
제5정규화 | 조인에 의해서 종속성이 발생되는 경우 분해 |
- 정규화의 문제점
select시 join을 하기 때문에 cpu memory를 많이 사용
SELECT 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
FROM 직원, 부서
WHERE 직원.부서코드 = 부서.부서코드
프로그램화 했을시
for(int i=0; i<N; ++i)
for(int j=0; j<M; ++j)
if(직원_부서코드[i] == 부서_부서코드[j]{}
데이터양 증가시 시간증가와 부하 유발 -> 해결하기 위해서 반정규화를함
하지만 반정규화시 데이터의 중복이라는 또다른 문제점 발생
- 반정규화
데이터의 중복은 허용하되 성능을 향상시키기 위해서 하는 방법(select 속도 향상, 모델의 유연성저하)
데이터의 중복이 있기때문에 수행전에 대상 조사및 다른 방법을 찾고 마지막에 반정규화를 수행함
수행하는 경우
- 수행속도가 느려지는 경우
- 다량의 범위를 자주하는 처리하는 경우
- 특정범위 데이터를 자주 처리하는경우
- 요약 정보가 자주 요구되는 경우
- 반정규화 기법
- 계산된 칼럼추가
총합계, 평균, 평가등을 미리 계산하고 추가
- 테이블 수직분할
열을 기준으로 분할하는 기법 Column (c1,c2,c3,c4,c5,c6) => Column1 (c1,c2,c3), Column2 (c4,c5,c6)
- 테이블 수평분할
행의 값 기준으로 분할하는 기법 Row(2001, 2002, 2003, 2004) => Row1 (2001, 2002) Row2 (2003, 2004)
*분할 기법
- Range Partition - 범위를 기준
- List Partition - 특정 값을 지정
- Hash Partition - 해시 함수를 적용
- Composite Partition - 범위와 해시 두개를 동시에 사용
- 테이블 병합
1:1 관계의 테이블 두개를 하나로 병합
1:N 관계의 테이블 두개를 하나로 병합 -> 많은양의 데이터 중복 발생
슈퍼타입과 서브타입관계일 경우 병합 -> 고객엔터티(슈퍼타입), 개인고객, 법인고객(서브타입)
변환방법 | 설명 |
OneToOne type | 개별 테이블 유지 조인 많고 관리 어려움 |
Plus type | 슈퍼+서브테이블 도출 조인 많고 관리 어려움 |
Single type | 두개를 하나의 테이블로 유지 관리 편하지만 입출력 성능 하락 |
슈퍼타입 및 서브타입 변환 방법
- 분산데이터베이스 <-> 중앙 집중형 데이터베이스
- 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 분산작업을 처리 수행
*투명성 종류 - 분할 : 사용자는 데이터베이스가 분할되어있는지 알 필요성 없음
- 위치 : 저장장소 명시 필요X, 어디 있든 접근 가능
- 지역사상 : 지역 시스템 이름과 무관한 이름 사용가능
- 중복 : 데이터베이스 객체가 중복되어도 데이터는 일관됨
- 장애 : 통신망에 장애가 생겨도 무결성 보장
- 병행 : 동시에 트랜잭션 수행 가능
- 분산데이터베이스 설계방식
상향식 - 지역스키마 작성 후 전역스키마 작성
하향식 - 전역스키마 작성 후 지역스키마 작성
장점 - 신뢰성 가용성, 빠른 응답(병렬처리가 가능), 용량 확장용이
단점 - 관리 통제 어려움, 보안관리, 무결성관리, 설계 복잡
'자격증 > SQLD' 카테고리의 다른 글
SQLD(4)-SQL활용1 (0) | 2021.08.13 |
---|---|
SQLD(3)-SQL기본3 (0) | 2021.08.12 |
SQLD(2)-SQL기본2 (0) | 2021.08.12 |
SQLD(3)-SQL기본1 (0) | 2021.08.11 |
SQLD(1)-데이터 모델링 (0) | 2021.08.09 |