SQLD(02)
이번 포스팅에서는 SQLD 자격검증 시험을 위한 내용으로 저번시간에 이어 데이터 모델과 성능에 관한 내용으로 정규화와 반정규화 그리고 분산데이터 베이스 시스템에 대하여 공부한다.
데이터 모델과 성능
데이터는 DBMS에서 관리 되는데 현실 세계의 정보들을 추상적으로 담고 있다. 하지만 실제적으로 가상 공간이 아닌 물리적인 공간에 저장되어야 데이터를 사용할 수 있기 때문에 구조를 잘 잡지 않은 데이터 모델은 성능적으로 좋지않다. 따라서 개발자들은 데이터를 모델링 할 때 구조적인 측면과 성능적인 측면을 모두 고려해야하는데 이를 위해 정규화기법과 반정규화 기법이 사용된다.
정규화 기법
정규화 기법은 중복된 데이터를 제거하여 무결성(데이터가 중복되지 않고 일관성을 유지)을 유지하고 중복 데이터의 제거로 저장공간을 확보하는 것이다.
정규화 기법의 종류
정규화 기법의 종류는 제1~5 정규화, BCNF(Boyce-Codd Normal Form)정규화가 있다
- 제1 정규화(1NF)
- 테이블의 원자값이 원자성을 만족시키도록 하는 정규화 기법이다.
- 말이 어려워 보이지만 쉽게 얘기해서 한 컬럼 (행)에 두 개 이상의 값이 들어가면 안된다는 것이다.
- ex) 회원 테이블의 수업 컬럼에 축구,농구가 있다면 두 개의 열로 나누어야 한다.
- 제 2정규화(2NF)
- 제 1정규화의 다음 작업으로 부분 함수 종속을 제거하여 모든 컬럼이 기본키에 종속되게 만드는 것이다.
- 쉽게 풀어보면 제 1 정규화로 인해 기본키가 복합키(2개 이상 조합)이 될 경우 복합키나 그의 부분이 같은 테이블의 다른 컬럼의 기본키가 될 수 있을때 분리하는 방밥이다.
- ex) 사원 테이블의 여러 다른 컬럼과 부서와 부서번호 컬럼이 있을때 부서 번호를 부서의 기본키로 사용하여 부서 테이블을 분리.
- 제 3정규화(3NF)
- A->B를 참조하고 B->C를 참조하고 A->C를 성립하는 것을 이행적 종속이라 하는데 이를 제거하는 것이다.
- ex) 회원은 취미가 있고 취미는 가격이 있을때 취미가 가격이 든다면 이는 회원과 취미 / 취미와 갸격으로 테이블을 분리 시킨다.
- BCNF (Boyce-Codd Normal Form)
- 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
- ex) 3정규화를 강화 시킨 개념으로 회원과 수업 그리고 선생님이 있을 때 유일성을 가진건 회원과 선생이다. 그렇기 때문에 회원과 선생을 / 선생과 수업을 분리하여 선생을 결정자로 두는 것이다.
- 제 4정규화(4NF)
- 다중값 종속성을 지우는 것
- 제 5정규화(5NF)
- 조인에 의한 종속성을 지우는 것
데이터 정규화의 문제점
- 데이터의 중복을 제거하다 보면 테이블이 너무 많아져서 Join을 과도하게 사용해야 한다.
- 과도한 Join이 CPU와 메모리의 사용을 증가시켜 성능 저하를 유발한다.
인덱스와 옵티마이저
- 인덱스(Index) : Table의 컬럼을 빠르게 찾기 위해 색인을 넣는 자료구조 방법이다.
- 옵티마이저(Optimizer) : DBMS의 핵심 엔진으로 SQL을 수행할 최적의 경로를 생성한다.
반 정규화 기법 (De-Normalization)
정규화 방식과는 다르게 데이터 베이스의 성능을 향상 시키기 위해 어느정도 중복을 허용하여 조인을 줄이는 기법이다.
반 정규화 절차
- 대상 조사 및 검토
- 범위와 대상을 조사
- 다른 방법 컴토
- 클러스트링(A~Z), 뷰(가상테이블), 인덱스 튜닝(책의 찾아보기 p.31), 파티션(저장공간 분리) 등 다른 방법을 검토
- 반 정규화 수행
반 정규화 기법의 종류
- 계산된 컬럼 추가
- 총액, 평균값 등 계산을 해야하는 컬럼을 미리 계산하여 추가함
- 테이블 수직분할
- 하나의 테이블을 키값은 두고 컬럼을 분리하여 두 개 이상의 테이블로 분할
- ex) [key / col1 / col2], [key / col3 / col4] (key는 같은 값이 들어있음)
- 테이블 수평분할
- 다른 컬럼은 동일하게 두고 기본키를 나눔
- ex) [key(A~Z) / col1 / col2] => [key(A~G) / col1 / col2], [key(H~Z) / col1 / col2]
- 테이블 병합
- 1대1 혹은 1대N 관계의 테이블을 병합하여 성능을 향상
- 슈퍼타입과 서브타입의 테이블을 통합
- ex) 고객(슈퍼) => 개인, 법인 (서브)
- 병합방법(테이블이 크게 합쳐질 수록 관리도와 성능이 좋음)
- OneToOne Type(1:1) : 슈퍼타입과 서브타입을 모두 분리
- Plus Type(슈퍼 + 서브) : 슈퍼+서브1, 슈퍼+서브2 ~
- Single Type(AllInOne 타입) : 슈퍼 + 모든 서브
파티션 기법
하나의 저장공간을 나누어서 데이터를 분산하여 저장하는 방식
파티션 기법의 종류
- Range Partition : 데이터 값의 범위로 나눔 ex) 년도별 판매 제품
- List Partition : 특정한 값을 지정하여 나눔 ex) Best 상품
- Hash Partition : Hash 함수를 기법으로 나누며 파티션 별 크기가 동일해 진다 (다만 관리가 어려움)
- Composite Partition : 두 개 이상의 방법을 복합으로 사용
파티션 기법의 장범
- 조회범위가 줄어 성능이 향상
- 파티션별 백업, 복구가 가능
분산 데이터 베이스
물리적으로 떨어져 있는 DBMS를 논리적으로 하나처럼 작동시키는 것을 말한다 ex) 구글 아시아 서버
분산 데이터 베이스의 투명성 6가지
- 위치 투명성 : 사용자는 데이터 베이스의 실제 위치를 알 필요 없이 액세스가 가능하다
- 분할 투명성 : 하나의 논리적 릴레이션이 단편으로 분할되어 있어 사본으로 저장되어 있음을 인식할 필요가 없다
- 지역사상 투명성 : 지역 DBMS와(아시아 서버) 물리적 DB 사이(본 서버)에 메핑을 보장한다
- 중복 투명성 : DB 객체가 여러 시스템에 복제가 되어도 일관성이 전부 유지되어야 한다
- 장애 투명성 : 어떤 장애의 발생에도 무관하게 트랜잭션을 정확하게 처리하고 무결성을 보장해야 한다
- 병행 투명성 : 여러 사람들이 동시에 수행해도 일관성이 유지 되어야 한다
분산 데이터 베이스의 설계 방식
- 상향식 설계 방식
- 지역스키마 => 전역스키마 순으로 섹터를 넓힌다
- 하향식 설계 방식
- 전역스키마 => 지역스키마 순으로 정밀하게 작성한다
분산 데이터 베이스의 장/단점
- 장점
- 신뢰성이 높으며 가용성(시간대비 올바르게 작동한 시간)이 높다
- 병렬처리가 가능하여 빠르다
- 용량 확장이 용이하다
- 단점
이번 시간까지 SQLD 기초 이론을 준비해 보았다. 다음 시간엔 실제 쿼리를 통한 SQL 사용 방법에 대해 공부해 본다.
개인적인 이해를 바탕으로 작성한 글 입니다. 피드백 언제든 환영합니다!