정규형

데이터베이스 설계

Lis Sulmont

Curriculum Manager

정규화

반복되는 데이터 그룹을 식별하고 새 테이블 생성

보다 공식적인 정의:

정규화의 목표:

  • 관계형 스키마의 중복 수준을 파악
  • 중복을 제거하기 위해 스키마를 변환하는 메커니즘 제공
1 Database Design, 2nd Edition by Adrienne Watt
데이터베이스 설계

정규형 (NF)

정규화 수준이 낮은 것부터 높은 순서:

  • 제1정규형 (1NF)
  • 제2정규형 (2NF)
  • 제3정규형 (3NF)
  • 기본 키 정규형 (EKNF)
  • 보이스-코드 정규형 (BCNF)

$$

  • 제4정규형 (4NF)
  • 필수 튜플 정규형 (ETNF)
  • 제5정규형 (5NF)
  • 도메인-키 정규형 (DKNF)
  • 제6정규형 (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
데이터베이스 설계

1NF 규칙

  • 각 레코드는 고유해야 함 - 중복 행 불가
  • 각 셀은 하나의 값만 포함해야 함

초기 데이터

| Student_id | Student_Email   | Courses_Completed                                        | 
|------------|-----------------|----------------------------------------------------------|
| 235        | [email protected]   | Introduction to Python, Intermediate Python              |
| 455        | [email protected] | Cleaning Data in R                                       | 
| 767        | [email protected] | Machine Learning Toolbox, Deep Learning in Python        |
데이터베이스 설계

1NF 형태

| Student_id | Student_Email   | 
|------------|-----------------|
| 235        | [email protected]   | 
| 455        | [email protected] | 
| 767        | [email protected] | 
| Student_id | Completed                |
|------------|--------------------------|
| 235        | Introduction to Python   | 
| 235        | Intermediate Python      | 
| 455        | Cleaning Data in R       | 
| 767        | Machine Learning Toolbox | 
| 767        | Deep Learning in Python  | 
데이터베이스 설계

2NF

  • 1NF를 만족해야 함 AND
    • 기본 키가 단일 열인 경우
      • 자동으로 2NF 만족
    • 복합 기본 키인 경우
      • 비키 열은 모든 키에 종속되어야 함

초기 데이터

| Student_id (PK) | Course_id (PK) | Instructor_id | Instructor    | Progress |
|-----------------|----------------|---------------|---------------|----------|
| 235             | 2001           | 560           | Nick Carchedi | .55      |
| 455             | 2345           | 658           | Ginger Grant  | .10      |
| 767             | 6584           | 999           | Chester Ismay | 1.00     |
데이터베이스 설계

2NF 형태

| Student_id (PK) | Course_id (PK) | Percent_Completed |
|-----------------|----------------|-------------------|
| 235             | 2001           | .55               |
| 455             | 2345           | .10               |
| 767             | 6584           | 1.00              |
| Course_id (PK) | Instructor_id | Instructor    |
|----------------|---------------|---------------|
| 2001           | 560           | Nick Carchedi |
| 2345           | 658           | Ginger Grant  |
| 6584           | 999           | Chester Ismay |
데이터베이스 설계

3NF

  • 2NF 만족
  • 이행적 종속성 없음: 비키 열이 다른 비키 열에 종속 불가

초기 데이터

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
데이터베이스 설계

3NF 형태

| Course_id (PK) | Instructor    | Tech   |
|----------------|---------------|--------|
| 2001           | Nick Carchedi | Python |
| 2345           | Ginger Grant  | SQL    |
| 6584           | Chester Ismay | R      |
| Instructor_id | Instructor    | 
|---------------|---------------|
| 560           | Nick Carchedi | 
| 658           | Ginger Grant  | 
| 999           | Chester Ismay |
데이터베이스 설계

데이터 이상

정규화가 부족할 경우의 위험은?

1. 갱신 이상

2. 삽입 이상

3. 삭제 이상

데이터베이스 설계

갱신 이상

데이터 중복으로 인해 갱신 시 데이터 불일치 발생

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

학생 520의 이메일 갱신 시:

  • 여러 레코드를 모두 수정해야 하며, 그렇지 않으면 불일치 발생
  • 갱신하는 사용자가 중복 여부를 알고 있어야 함
데이터베이스 설계

삽입 이상

속성 누락으로 인해 레코드 추가 불가

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

강좌에 등록하지 않은 신규 학생은 삽입 불가

데이터베이스 설계

삭제 이상

레코드 삭제 시 의도치 않은 데이터 손실 발생

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

학생 230을 삭제하면 Cleaning Data in R 데이터는 어떻게 되는가?

데이터베이스 설계

데이터 이상

정규화가 부족할 경우의 위험은?

1. 갱신 이상

2. 삽입 이상

3. 삭제 이상

데이터베이스가 정규화될수록 데이터 이상 발생 가능성이 낮아짐

이전 영상에서 다룬 정규화의 단점도 잊지 말 것

데이터베이스 설계

연습해 봅시다!

데이터베이스 설계

Preparing Video For Download...