관계형 데이터베이스 관리 시스템 (RDBMS)의 정규화는 데이터베이스 설계 과정에서 중복을 최소화하고 데이터 일관성을 유지하기 위해 사용되는 중요한 개념입니다. 정규화는 데이터를 효율적으로 저장하고 관리하기 위한 일련의 규칙과 원리를 제공합니다. 정규화를 통해 데이터 중복을 줄이고 데이터베이스 구조를 간결하게 유지할 수 있습니다.
주요 정규형(Normal Form)에 대한 설명
제 1 정규형 (1NF)
제 1 정규형(1NF)은 관계형 데이터베이스의 정규화 중에서 가장 기본적인 단계로, 테이블의 열들이 원자적인 값을 갖고 있어야 함을 의미합니다.
원자적인 값: 각 열의 값은 더 이상 분해되지 않는 단순한 값이어야 합니다. 즉, 열에는 중첩된 데이터나 다중 값이 포함되어서는 안 됩니다. 예를 들어, 하나의 열에 여러 개의 값이 쉼표로 구분된 문자열이 들어가면 이는 1NF를 위배합니다. 대신, 각 값은 별도의 열에 저장되어야 합니다.
모든 행은 유일한 식별자를 가져야 합니다: 모든 테이블은 프라이머리 키(Primary Key)라 불리는 고유한 식별자를 가져야 합니다. 이 식별자를 사용하여 각 행을 구분하고 인식할 수 있어야 합니다.
예를 들어, 학생 정보를 저장하는 데이터베이스 테이블을 고려해봅시다. 학생 테이블에는 다음과 같은 열이 있을 수 있습니다:
- 학생 ID (Primary Key)
- 이름
- 전화번호
- 주소
- 수강 과목
학생 ID 이름 전화번호 주소 수강 과목
| 1 | Alice | 123-4567 | New York | Math, Eng |
| 2 | Bob | 987-6543 | San Fran | Sci |
| 3 | Carol | 555-1234 | Los Angeles | Hist |
각 열은 원자적인 값으로 구성되며, 각 행은 고유한 학생 ID로 식별됩니다. 이렇게 구성된 테이블은 1NF를 준수하고 데이터베이스의 데이터 일관성과 유지보수를 용이하게 만듭니다.
제 2 정규형(2NF)
제 2 정규형(2NF)은 관계형 데이터베이스의 정규화 과정 중에서 데이터 중복을 최소화하고 데이터 의존성을 관리하는 데 도움이 되는 두 번째 정규화 단계입니다
- 부분 함수 종속 (Partial Functional Dependency): 하나의 테이블에서 어떤 열(속성)이 부분적으로 다른 열(들)에 함수적으로 종속되는 경우를 나타냅니다. 이것은 특정 열의 값이 두 개 이상의 열에 의존할 때 발생합니다.
- 후보 키 (Candidate Key): 후보 키는 테이블에서 고유한 레코드를 식별하기 위해 사용할 수 있는 열(또는 열의 조합)을 나타냅니다. 후보 키는 프라이머리 키를 결정하기 위한 후보가 되는 열입니다.
- 부분 함수 종속 (Partial Functional Dependency): 하나의 테이블에서 어떤 열(속성)이 부분적으로 다른 열(들)에 함수적으로 종속되는 경우를 나타냅니다. 이것은 특정 열의 값이 두 개 이상의 열에 의존할 때 발생합니다.
- 후보 키 (Candidate Key): 후보 키는 테이블에서 고유한 레코드를 식별하기 위해 사용할 수 있는 열(또는 열의 조합)을 나타냅니다. 후보 키는 프라이머리 키를 결정하기 위한 후보가 되는 열입니다.
이코드는 1정규형을 만족하지만 2정규형을 만족하지 않습니다.
| 학교 코드 (SchoolID) | 학교 이름 | 학교 위치 | 학교 구성원 ID (MemberID) | 구성원 이름 | 구성원 역할 |
|---------------------|------------|----------|-------------------------|-------------|-----------|
| 1 | 학교A | 위치A | 101 | 학생A | 학생 |
| 1 | 학교A | 위치A | 102 | 교사A | 교사 |
| 2 | 학교B | 위치B | 201 | 학생B | 학생 |
| 2 | 학교B | 위치B | 202 | 교사B | 교사 |
2정규형을 만족하도록 테이블을 분할
학교정보
| 학교 코드 (SchoolID) | 학교 이름 | 학교 위치 |
|---------------------|------------|----------|
| 1 | 학교A | 위치A |
| 2 | 학교B | 위치B |
구성원 정보
| 구성원 ID (MemberID) | 학교 코드 (SchoolID) | 구성원 이름 | 구성원 역할 |
|---------------------|---------------------|-------------|-----------|
| 101 | 1 | 학생A | 학생 |
| 102 | 1 | 교사A | 교사 |
| 201 | 2 | 학생B | 학생 |
| 202 | 2 | 교사B | 교사 |
제 3 정규형(3NF)
- 테이블은 이미 2NF(제 2 정규형)를 만족해야 합니다.
- 비주요 속성이 후보 키에 대해 이행적 종속성(Transitive Dependency)을 가지지 않아야 합니다.
이행적 종속성(Transitive Dependency)은 다음과 같이 정의됩니다: 만일 A가 B에 종속되고, B가 C에 종속되면 A가 C에 종속되는 경우입니다.
| 학생 ID (StudentID) | 학생 이름 | 교과목 | 교수 |
|--------------------|----------|--------|------|
| 101 | 학생A | 수학 | 교수A |
| 102 | 학생B | 역사 | 교수B |
이 경우, "교수" 열은 "교과목"에 종속되며 "교과목" 열은 "학생 ID"에 종속되어 이행적 종속성을 가지고 있습니다. 이로 인해 3NF를 위배합니다.
학색정보 테이블
| 학생 ID (StudentID) | 학생 이름 |
|--------------------|----------|
| 101 | 학생A |
| 102 | 학생B |
교과목 정보 테이블
| 교과목 | 교수 |
|-------|------|
| 수학 | 교수A |
| 역사 | 교수B |
이렇게 테이블을 분할하면 "교과목" 열과 "교수" 열이 별개의 테이블에 저장되며, 이행적 종속성이 제거됩니다. 이제 3NF를 만족하게 됩니다.
제 4 정규형 (4NF):
제 4 정규형은 다치 종속성(가변 다치 종속성)을 해결하는 정규형입니다. 다치 종속성은 릴레이션에서 한 열의 값이 여러 열의 값에 독립적으로 종속되는 경우를 의미합니다. 4NF를 만족하려면 다음 조건을 충족해야 합니다:
- 테이블은 이미 3NF를 만족해야 합니다.
- 테이블의 모든 다치 종속성이 제거되어야 합니다.
4NF는 대부분의 상황에서 3NF로 충분하며, 4NF를 적용하는 경우가 제한적입니다. 4NF를 위배하는 경우, 추가적인 정규화나 테이블 분할이 필요합니다.
제 5 정규형 (5NF):
제 5 정규형은 조인 종속성을 해결하는 정규형입니다. 조인 종속성은 여러 테이블 간의 조인 작업이 없이 특정 속성을 얻을 수 있는 경우를 나타냅니다. 5NF를 만족하려면 다음 조건을 충족해야 합니다:
- 테이블은 이미 4NF를 만족해야 합니다.
- 테이블 내의 모든 결합 종속성을 제거해야 합니다.
5NF를 만족시키는 것은 대부분의 경우에 복잡하며, 실무에서는 드물게 사용됩니다. 일반적으로 데이터베이스 설계에서 4NF 이상의 정규화를 필요로 하는 경우는 흔치 않습니다.
이러한 정규화 단계는 데이터베이스 설계를 개선하고 데이터 중복, 이상 현상, 갱신 이상 등을 방지하는 데 도움을 줍니다. 그러나 지나치게 정규화된 데이터베이스는 쿼리 성능을 저하시킬 수 있으므로 설계자는 데이터베이스 요구사항과 성능 간의 균형을 고려해야 합니다.
'cs 공부' 카테고리의 다른 글
| HTTP 메서드에 대해 설명해주세요. (0) | 2023.10.24 |
|---|---|
| Primary Key, Foreign Key에 대해 설명해주세요. (0) | 2023.10.19 |
| mvc 패턴에 대해서 설명해주세요. (0) | 2023.10.19 |
| NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요. (0) | 2023.10.19 |
| JWT에 대해 설명해주실 수 있을까요 (0) | 2023.10.16 |