-
[SQLD] SQL 개발자 공부하기 Day 2 : 정규화 / 반정규화 / 관계Study/SQL 2024. 2. 17. 23:23728x90반응형
목차
1. 정규화 / 반정규화 / 관계
정규화 Normalization
데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 얻기 위한 방법
‣ 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임.
‣ 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행한다.
‣ 정규화된 모델은 테이블이 분해된다.
‣ 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
1. 제1정규화 - 함수적 종속성을 근거로 기본 키를 설정한다.
2. 제2정규화 - 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생, 부분 함수 종속성을 제거.
3. 제3정규화 - 이행 함수 종석성을 제거.
4. BCNF - 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
5. 제4정규화 - 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
6. 제5정규화 - 조인에 의해서 종속성이 발생되는 경우 분해한다.
정규화의 문제점
‣ 데이터 조회 시에 조인을 유발하기 때문에 CPU와 메모리를 많이 사용한다.
‣ 정규화의 문제점을 해결하기 위해서 반정규화를 하여 하나의 테이블에 저장한다면 조인을 통한 성능 저하는 해결될 것.
반정규화 De-Normalization
데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
‣ 조회 속도를 향상하지만, 데이터 모델의 유연성은 낮아진다.
반정규화를 수행하는 경우
‣ 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
‣ 다량의 범위를 자주 처리해야 하는 경우
‣ 특정 범위의 데이터만 자주 처리하는 경우
‣ 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
1. 대상 조사 및 검토 - 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사한다.
2. 다른 방법 검토 - 반정규화를 수행하기 전에 다른 방법이 있는지 검토한다.
3. 반정규화 수행 - 테이블, 속성, 관계 등을 반정규화 한다.
728x90반정규화 기법
1. 계산된 칼럼 추가
‣ 배치 프로그램으로 총판매액, 평균잔고, 계좌평가 등을 미리 계산하고, 그 결과를 특정 칼럼에 추가한다.
2. 테이블을 수직 분할
‣ 칼럼을 분할하여 새로운 테이블을 만든다.
3. 테이블 수평 분할
‣ 값을 기준으로 테이블을 분할한다.
4. 테이블 병합
‣ 1대1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킨다.
‣ 1대N 관계의 테이블을 병합하여 성능을 향상시킨다. but 많은 양의 데이터 중복 발생
‣ 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.
* Super Type과 Sub Type
‣ 부모와 자식 간의 관계를 나타냄.
‣ 고객 엔터티는 개인고객과 법인고객으로 분류된다. 이 때, 고객 엔터티는 Super Type, 개인고객과 법인고객은 Sub Type이 된다.
* Super Type과 Sub Type 변환 방법
1. OneToOne Type - 슈퍼 타입과 서브 타입을 개별로 도출. 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어렵다.
2. Plus Type - 슈퍼 타입과 서브 타입 테이블로 도출. 조인이 발생하고 관리가 어렵다.
3. Single Type - 슈퍼 타입과 서브 타입을 하나의 테이블로 도출. 조인 성능이 좋고 관리가 편하지만, 입출력 성능이 나쁘다.
반응형파티션 기법 Partition
데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있다.
파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장된다.
‣ Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.
‣ List Partition : 특정한 값을 지정하여 파티션을 수행한다.
‣ Hash Partition : 해시 함수를 적용하여 파티션을 수행한다.
‣ Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.
파티션 테이블의 장점
‣ 데이터 조회 시에 액세스 범위가 줄어들기 때문에 성능이 향상됨.
‣ 데이터가 분할되어 있기 때문에 Input/Output 성능이 향상됨.
‣ 각 파티션을 독립적으로 백업 및 복구가 가능.
식별 관계 Identification Relationship
‣ 강한 개체는 어떤 다른 엔터티에게 의존하지 않고 독립적으로 존재
‣ 강한 개체는 다른 엔터티와 관계를 가질 때 다른 엔터티에게 기본키를 공유
‣ 강한 개체는 식별 관계로 표현된다.
‣ 강한 개체의 기본키 값이 변경되면 식별관계에 있는 엔터티의 값도 변경된다.
비식별 관계 Non - Identification Relationship
‣ 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 칼럼으로 관계를 가지는 것.
‣ 비 식별 관계는 점선으로 표현
NULL
값이 정의되지 않은 미지의 값. 0이나 공백이 아닌, 값이 정해지지 않은 값.
‣ NULL과 연산을 수행하면 항상 NULL
‣ 집계함수는 NULL 값을 제외
728x90반응형'Study > SQL' 카테고리의 다른 글
[SQLD] SQL 개발자 공부하기 Day 6 : GROUP BY / HAVING / 형변환 / 내장형 함수 (0) 2024.02.21 [SQLD] SQL 개발자 공부하기 Day 5 : SELECT / WHERE / NULL (0) 2024.02.20 [SQLD] SQL 개발자 공부하기 Day 4 : 관계형 데이터베이스 / SQL (0) 2024.02.19 [SQLD] SQL 개발자 공부하기 Day 3 : 데이터 모델링의 이해 오답 노트 (0) 2024.02.18 [SQLD] SQL 개발자 공부하기 Day 1 : 데이터 모델링 / ERD / 엔터티 / 속성 (1) 2024.02.16