✔️ 정규화
정규화란?
- 관계형 데이터베이스에서 테이블 간 데이터의 중복을 최소화하게 데이터를 구조화하는 작업
- 구체적으로는 불만족스러운 나쁜 릴레이션의 속성들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업
- 가장 큰 목표를 테이블 간 중복된 데이터를 허용하지 않도록 하는 것
- 이처럼 중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고 DB 저장 용량 또한 효율적으로 관리할 수 있음
- 이를 통해 불필요한 데이터를 최소화하여 무결성을 지키고, 이상 현상(삽입/삭제/수정 이상)을 방지하도록 함
- 또한 테이블 구성을 논리적이고 직관적으로 할 수 있으며 데이터베이스 구조 확장에도 용이해짐
- 반면 테이블의 분해로 인해 JOIN 연산이 많아지게 되므로 질의에 대한 응답 시간이 느려질 수 있음
- 그러므로 항상 일정한 범위만을 조회하는 경우, 대량의 범위를 자주 처리하는 경우 등
조회를 하는 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우에는
시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 반정규화(비정규화)를 적용하는 전략이 필요 - 정규화 과정을 거치게 되면 정규형을 만족하게 됨
- 정규형이란 특정 조건을 만족하는 릴레이션의 스키마의 형태
1차 정규화 (1NF)
- 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것
- 어떤 릴레이션에 속한 모든 도메인이 원자값으로 되어 있어야 함
- 모든 속성에 반복되는 그룹이 나타나지 않아야 함
- 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 함
- 즉, 복합 속성, 다중값 속성, 중첩 릴레이션 등 비 원자적인 속성들을 허용하지 않는 릴레이션 형태
- 예) Telephone Number은 원자값이 아님


2차 정규화 (2NF)
- 테이블의 모든 컬럼이 완전 함수적 종속을 만족하도록 테이블을 분리시키는 것
- 함수적 종속이란 X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다고 함
- 완전 함수적 종속이란 X는 Y를 함수적으로 결정할 때,
X의 어떠한 속성이라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우 - 완전 함수적 종속과 반대되는 부분 함수적 종속이란 기본키의 부분집합 키가 결정자가 되어서는 안된다는 것으로,
테이블에서 기본키가 복합키로 묶여있을 때, 두 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안 됨 - 예) Manufacturer Country은 Manufacturer에 의해서만 결정됨


3차 정규화 (3NF)
- 이행적 종속을 없애기 위해 테이블을 분리시키는 것
- 이행적 종속이란 A → B, B → C면 A → C가 성립되는 것
- 예) Winner Data of Birth는 Winner에 의해 결정됨


BCNF (Boyce-Codd)
- 3차 정규화를 조금 더 강화한 버전으로 3차 정규화에서 해결할 수 없는 이상현상을 해결할 수 있음
- 여러 후보 키가 존재하는 테이블에 대해서 모든 결정자가 후보키 집합에 속해야 함
- 수 많은 정규형이 있지만 관계형 데이터베이스 설계의 목표는 각 테이블이 3차 정규화 또는 BNCF를 갖게 하는 것
'Tech Interview > Database' 카테고리의 다른 글
[Database] SQL vs NoSQL (0) | 2024.01.10 |
---|---|
[Database] 트랜잭션 (0) | 2024.01.08 |
[Database] 이상 (0) | 2024.01.02 |
[Database] 인덱스 (0) | 2023.12.30 |
[Database] 조인 (0) | 2023.12.29 |
✔️ 정규화
정규화란?
- 관계형 데이터베이스에서 테이블 간 데이터의 중복을 최소화하게 데이터를 구조화하는 작업
- 구체적으로는 불만족스러운 나쁜 릴레이션의 속성들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업
- 가장 큰 목표를 테이블 간 중복된 데이터를 허용하지 않도록 하는 것
- 이처럼 중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고 DB 저장 용량 또한 효율적으로 관리할 수 있음
- 이를 통해 불필요한 데이터를 최소화하여 무결성을 지키고, 이상 현상(삽입/삭제/수정 이상)을 방지하도록 함
- 또한 테이블 구성을 논리적이고 직관적으로 할 수 있으며 데이터베이스 구조 확장에도 용이해짐
- 반면 테이블의 분해로 인해 JOIN 연산이 많아지게 되므로 질의에 대한 응답 시간이 느려질 수 있음
- 그러므로 항상 일정한 범위만을 조회하는 경우, 대량의 범위를 자주 처리하는 경우 등
조회를 하는 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우에는
시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 반정규화(비정규화)를 적용하는 전략이 필요 - 정규화 과정을 거치게 되면 정규형을 만족하게 됨
- 정규형이란 특정 조건을 만족하는 릴레이션의 스키마의 형태
1차 정규화 (1NF)
- 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것
- 어떤 릴레이션에 속한 모든 도메인이 원자값으로 되어 있어야 함
- 모든 속성에 반복되는 그룹이 나타나지 않아야 함
- 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 함
- 즉, 복합 속성, 다중값 속성, 중첩 릴레이션 등 비 원자적인 속성들을 허용하지 않는 릴레이션 형태
- 예) Telephone Number은 원자값이 아님


2차 정규화 (2NF)
- 테이블의 모든 컬럼이 완전 함수적 종속을 만족하도록 테이블을 분리시키는 것
- 함수적 종속이란 X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다고 함
- 완전 함수적 종속이란 X는 Y를 함수적으로 결정할 때,
X의 어떠한 속성이라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우 - 완전 함수적 종속과 반대되는 부분 함수적 종속이란 기본키의 부분집합 키가 결정자가 되어서는 안된다는 것으로,
테이블에서 기본키가 복합키로 묶여있을 때, 두 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안 됨 - 예) Manufacturer Country은 Manufacturer에 의해서만 결정됨


3차 정규화 (3NF)
- 이행적 종속을 없애기 위해 테이블을 분리시키는 것
- 이행적 종속이란 A → B, B → C면 A → C가 성립되는 것
- 예) Winner Data of Birth는 Winner에 의해 결정됨


BCNF (Boyce-Codd)
- 3차 정규화를 조금 더 강화한 버전으로 3차 정규화에서 해결할 수 없는 이상현상을 해결할 수 있음
- 여러 후보 키가 존재하는 테이블에 대해서 모든 결정자가 후보키 집합에 속해야 함
- 수 많은 정규형이 있지만 관계형 데이터베이스 설계의 목표는 각 테이블이 3차 정규화 또는 BNCF를 갖게 하는 것
'Tech Interview > Database' 카테고리의 다른 글
[Database] SQL vs NoSQL (0) | 2024.01.10 |
---|---|
[Database] 트랜잭션 (0) | 2024.01.08 |
[Database] 이상 (0) | 2024.01.02 |
[Database] 인덱스 (0) | 2023.12.30 |
[Database] 조인 (0) | 2023.12.29 |