희렌버핏
[SQLD Part2] 02 데이터 모델과 성능 본문
1 정규화
1.1 정규화
- 일관성, 최소 중복, 최대 유연성 위한 방법
- 데이터를 분해하는 과정
- 독립성을 확보하기 위한 방법
- 변화 발생해도 변경 최소화
- 제 5정규화까지 있지만 3정규화까지만 수행
- 불필요한 데이터 입력하지 않아도 돼서 중복 데이터가 제거된다.
* 함수적 종속 : X -> Y 이면 Y는 X에 함수적으로 종속
1.2 정규화 절차
① 제1정규화
- 기본키를 설정 ex) 계좌번호 하나만으로는 유일성을 만족하지 못해 회원id를 함께 기본키로 추가
- 유일성을 만족할 수 있는 식별자를 찾는다. 한개의 컬럼으로 안될 경우 두개를 합친다.
② 제2정규화
- 기본키가 2개 이상의 컬럼으로 이루어진 경우 부분 함수 종속성을 제거(분해)한다.
- 부분 함수 종속성 : 회원ID가 변경되면 이름도 변경된다. 회원ID가 이름을 함수적 종속한다. -> 회원 테이블로 분해
- 모든 속성이 식별자에 종속되어야 한다? 그렇지 않으면 분해 > 중복을 확인하여 분해
③ 제3정규화
- 이행 함수 종속성 제거
- 이행 함수 종속성 : 기본키가아닌 컬럼 간에 종속성이 발생. 관리점이 관리점 코드에 종속. -> 관리점 테이블 도출. 관리점 코드 기본키
④ 보이스-코드 정규화
- 다수의 주식별자를 분리
⑤ BCNF(Boyce-Codd Normal Form)
- 기본키를 제외하고 후보키가 존재하고 후보키가 기본키의 속성 중에 하나를 함수적 종속하는 경우 발생
- 복수의 후보키, 후보키들이 복합 속성, 서로 중첩되어야 함
- 기본키(학번, 과목번호)가 교수를 함수적 종속 + 교수는 최소 유일성 만족하는 후보키이고 과목번호를 함수적으로 종속 -> 교수 테이블 도출, 기본키는 교수 과목번호는 컬럼.
> 교수라는 후보키가 과목번호라는기본키를 함수적 종속
⑥ 제4정규화
- 한 속성에서 다른 속성에 대한 결과값이 여러개 나오는 다치종속을 분리
⑦ 제5정규화
- 결합종속일 경우 다수의 테이블로 분리
2 정규화와 성능
2.1 정규화의 문제점
- 데이터 조회시에 조인을 유발하여 cpu와 메모리를 많이 사용한다.
- 성능 저하를 위해 반정규화가 있다.
2.2 정규화 사용한 성능튜닝
- 반정규화는 데이터 중복되어 한행을 읽으려면 여러개의 블록을 읽어야 하기때문에 디스크 입출력 증가로 성능이 떨어지게 된다.
- 따라서 정규화는 입출력 데이터의 양을 줄여 성능을 향상시킬 수 있다.
3 반정규화
3.1 반정규화
- 데이터 중복 허용
- 조인을 줄이는 db 성능 향상 기법
- 데이터 모델의 유연성 낮아짐
3.2 반정규화 수행하는 경우
- 종속성,활용성은 향상되지만 수행 속도가 느려지는 경우
- 특정 범위 데이터만 자주처리
- 다량 범위 데이터 자주 처리
- 요약/집계 정보가 자주 요구 되는 경우
* 반정규화 절차
- 대상 조사 및 검토
- 다른 방법 검토
- 반정규화 수행
==> 반정규화는 정규화 수행 이후에 해야한다.
* 클러스터링
- 인덱스 정보를 물리적으로 정렬해서 저장하는 방법
- 조회 시에 인접 블록을 연속으로 읽어 성능 향상
3.3 반정규화 기법
① 계산된 컬럼 추가
② 테이블 수직 분할
③ 테이블 수평 분할
④ 테이블 병합
* 파티션 기법
- 파티션을 이용해 테이블 분할 가능. 논리적을 하나의 테이블이지만 여러개의 데이터 파일에 분산해서 저장
Range Partition : 범위를 기준으로 파티션 수행
List Partition : 특정한 값을 기준으로 파티션 수행
Hash Partition : 해시 함수 적용해서 파티션 수행
Composite Partition : 범위와 해시를 복합적으로 사용해서 파티션 수행
* 파티션 테이블 장점
- 접근 범위가 줄어들어 성능 향상
- I/O 향상
- 파티션을 독립적으로 백업 복구 가능
* 슈퍼타입과 서브 타입
- 고객엔터티는 슈퍼타입, 개인고객과 법인고객은 서브타입
- 배타적 관계 : 고객이 개인고객이거나 법인고객 (서브타입이 많아야 1개)
- 포괄적 관계 : 고객이 개인고객일 수도 있고 법인고객 일수도 (서브타입이 1개이거나 그 이상)
* 슈퍼타입 및 서브타입 변환 방법
OneToOne Type : 슈퍼타입과 서브타입을 개별 테이블로 도출. 조인 많이 발생하고 관리 어려움
Plus Type : 슈퍼타입과 서브타입을 테이블로 도출, 조인 발생 관리 어려움
Single Type : 슈퍼타입과 서브타입을 하나의 테이블로 도출, 조인 성능 좋지만 I/O 성능 안좋음
4 분산 데이터베이스
4.1 데이터베이스의 구조
- 중앙 집중형 데이터베이스 : 한 대의 물리적 시스템에 여러사람이 접속하여 사용
- 분산 데이터베이스 : 여러 물리적 시스템에 하나의 이미지를 보여주고 분산 작업처리
4.2 분산 데이터베이스의 투명성
- 분산된 네트워크라는 것을 인식하지 못하는 투명성 필요
① 분산 투명성 : 하나의 논리적 릴레이션이 분산되어 저장되어 있음을 알 필요 없다.
② 위치 투명성 : 데이터베이스의 정장 위치를 명시할 필요 없다.
③ 지역 사상 투명성 : 각 지역 시스템 이름과 무관하게 명명하여 사용할 수 있다.
④ 장애 투명성 : 특정 데이터 베이스에 네트워크 장애가 발생해도 데이터가 일관되게 유지된다.
⑤ 병행 투명성 : 여러 고객이 접속하여 트랜잭션이 발생해도 데이터의 무결성이 보장된다.
⑥ 중복 투명성 : DB 객체가 여러 시스템에 중복되어 있어도 데이터의 일관성이 유지된다.
4.3 분산 데이터베이스 설계 방식
① 상향식 설계방식 : 지역스키마 작성 후 전역스키마를 작성 구축
② 하향식 설계방식 : 전역스키마 작성 후 지역 사상 스키마 작성 구축
* 기업에 여러종류의 DB 관리 시스템이 있다면 이기종 DB 시스템이기때문에 미들웨어(ODBC,JDBC)를 사용해야 한다.
* 분산데이터베이스 장점과 단점
- 장점 : 신뢰성 가용성 높음, 빠른 응답, 확장 용이
- 단점 : 관리 통제 어려움, 보안관리 어려움, 무결성 관리 어려움, 설계 복잡
'DB' 카테고리의 다른 글
[SQLD Part3] 03 SQL 최적화의 원리 (0) | 2023.08.31 |
---|---|
[SQLD Part3] 02 SQL 활용 (0) | 2023.08.29 |
[SQLD Part3] 01 SQL 기본 (0) | 2023.08.21 |
[SQLD Part2] 01 데이터 모델링 (0) | 2023.08.10 |