1. 정규화 ( Normalization )
01. 정규화
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법
- 데이터를 분해하는 과정 <-> 반정규화
- 데이터 중복을 제거하고 데이터 모델의 독립성을 확보함
- 테이블을 분해해서 각 테이블들의 관련성을 최소화하기 때문에 데이터 모델의 유연성을 높임
- 따라서 정규화를 수행하면 비즈니스에 변화가 발행해도 데이터 모델의 변경을 최소화 가능
- 제1정규화~제5정규화까지 있지만 보통 제3정규화까지만 수행
🔍정규화를 수행하지 않으면 부서 테이블과 직원 테이블이 하나로 합쳐져 있을 수 있다. 그러면 어떤 직원의 부서가 아직 정해지지 않았을 때 부서 코드를 임의로 할당해야 하는 등의 문제가 발생한다. 이러한 문제를 이상현상(Anormaly)이라고 함
🎯 정규화 절차
정규화 절차 | 설명 |
제1정규화 | - 속성(Attribute)의 원자성을 확보 🔍원자성 - 더 이상 쪼개지지 않는 성질로, 어떤 한 작업이 실행될 때 완전하게 진행돼 종료되거나, 아닌 경우 실행하지 않는 것을 말함 - 기본키(Primary key)를 설정 |
제2정규화 | - 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거 🔍 부분 함수 종속성 : 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부에만 종속되어 있는 것 |
제3정규화 | - 기본키를 제외한 칼럼들 간에 종속성을 제거 - 즉, 이행 함수 종속성을 제거하는 것 🔍 이행 함수 종속성 : 기본키를 제외하고 칼럼들 간에 종속성이 발생하는 것 |
BCNF |
- 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해 |
제4정규화 | - 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해해 다중값 종속성을 제거 |
제5정규화 | - 조인에 의해 종속성이 발생하는 경우 분해 |
02. 함수적 종속성 ( Functional Dependency )
결정자를 X, 종속자를 Y라고 했을 때 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값이 달라질 때 Y의 값이 달라지면 Y는 X에 함수적 종속이라고 한다.
(1) 제1정규화
계좌번호와 회원ID가 특정되면 (계좌명, 예수금, 이름, 관리점)이 그에 따라서 특정될 수 있다.
(2) 제2정규화
제1정규화에서 기본키에 있는 회원ID가 변경되면 이름도 함께 변경된다. 따라서 회원ID가 이름을 함수적으로 종속하고 있다. 이러한 부분 함수 종속성이 발생하면 분해해야 한다.
(3) 제3정규화
기본키를 제외하고 칼럼 간에 종속성이 발생하는 이행 함수 종속성을 제거해야 한다. 제3정규화를 수행하고나면 관리지점 테이블이 도출되고 관리점 코드가 기본키가 된다.
(4) BCNF (Boyce-Codd Normal Form)
복수의 후보키가 있고, 후보키들이 복합 속성이며, 서로 중첩될 경우 사용 가능한 정규화 기법이다. 위의 예에서 기본키인 {학번, 과목 번호}가 교수를 함수적으로 종속시키고 있다. 이때 교수가 후보키이고 교수가 과목 번호를 함수적으로 종속하는 경우 분해가 일어난다. 따라서 위와 같은 경우 교수 테이블을 새롭게 만들고 교수를 기본키, 과목번호를 칼럼으로 한다.
2. 정규화와 성능
01. 정규화의 문제점
- 정규화를 수행하고 나면 최소한의 데이터 중복을 가진 데이터베이스가 만들어지지만 데이터 조회(SELECT) 시에 조인(JOIN)을 유발하기 때문에 CPU와 메모리를 많이 사용한다
- RDBMS에서 JOIN을 수행할 때 알고리즘이 여러가지가 있지만 일단 중첩 루프 조인(Nested Loop Join)을 사용하면 이중루프문과 비슷하게 동작하므로 시간과 비용이 많이 든다
- 이러한 문제점을 해결하기 위해 반정규화를 사용한다
3. 반정규화 ( De-Normalization )
01. 반정규화
- 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인 횟수를 줄이는 데이터베이스 성능 향상 기법
- 반정규회는 조회 속도를 향상하지만 데이터 유연성은 낮아진다
02. 반정규화를 수행하는 경우
- 정규화했을 때 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
대상 조사 및 검토 - 데이터 처리 범위, 통계성을 확인해서 반정규화 대상을 조사
다른 방법 검토 - 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토해 다른 방법이 있는지 찾아봄
반정규화 수행 - 테이블, 속성, 관계 등을 반정규화
03. 반정규화 기법
파티션 기법
데이터베이스에서 파티셔닝을 이용해 테이블을 분할할 수 있다. 파티셔닝 기법은 소프트웨어적으로 데이터베이스를 분산 처리해 성능이 저하되는 것을 방지하고 관리를 보다 수월하게 할 수 있도록 한다. 즉, 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장한다.
- Range Partition - 데이터 값의 범위를 기준으로 파티션을 수행
- List Partition - 특정한 값을 지정해 파티션을 수행
- Hash Partition - 해시 함수를 적용해 파티션을 수행
- Composite Partition - 범위와 해시를 복합적으로 사용해 파티션을 수행
슈퍼 타입과 서브 타입 변환 방법
근래 자주 쓰이는 슈퍼/서브 타입 데이터 모델은 공통의 부분을 슈퍼타입으로 모델링하고 공통 부분으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브 엔터티로 구분해 업무의 모습을 정확하게 표현하는 데이터 모델이다.
논리적인 데이터 모델에서 이용되는 형태이며, 분석단계에서 많이 쓰이는 모델이다.
4. 분산 데이터베이스
01. 데이터베이스의 구조
- 중앙 집중형 데이터베이스 - 한 대의 물리적 시스템에 데이터베이스 관리 시스템을 설치하고 여러 명의 사용자가 데이터베이스 관리 시스템에 접속해 데이터베이스를 사용하는 구조
- 분산 데이터베이스 - 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고 분산된 작업 처리를 수행하는 데이터베이스 구조
02. 분산 데이터베이스의 투명성
- 분산 데이터베이스를 사용하는 고객은 시스템이 네트워크로 분산되어 있는지의 여부를 인식하지 못하면서, 자신만의 데이터베이스를 사용하는 것처럼 사용할 수 있다. 이처럼 데이터베이스는 투명성을 제공해야 한다
03. 분산 데이터베이스 설계 방식
- 상향식 설계 방식 - 지역 스키마 작성 후 향후 전역 스키마를 작성해 분산 데이터베이스 구축
- 하향식 설계 방식 - 전역 스키마 작성 후 해당 지역 사상 스키마를 작성해 분산 데이터베이스 구축
'프로그래밍 > DataBase' 카테고리의 다른 글
[SQLD] SQL 기본 및 활용 Section 01. SQL 기본 (2) DML부터 형변환까지 (0) | 2023.08.27 |
---|---|
[SQLD] SQL 기본 및 활용 Section 01. SQL 기본 (1) SQL기초와 DDL까지 (0) | 2023.08.26 |
[SQLD] 데이터 모델링의 이해 Section 01. Data Modeling (0) | 2023.08.23 |
[MySQL] 03. 데이터 타입 - 숫자 타입 (0) | 2023.02.25 |
[MySQL] 02. 명령어(1) (기본 명령어) (0) | 2023.02.24 |