Các dạng chuẩn

Thiết kế cơ sở dữ liệu

Lis Sulmont

Curriculum Manager

Chuẩn hóa

Xác định nhóm dữ liệu lặp và tạo bảng riêng cho chúng

Định nghĩa chính quy hơn:

Mục tiêu của chuẩn hóa là:

  • Đo được mức dư thừa trong lược đồ quan hệ
  • Cung cấp cách biến đổi lược đồ để loại bỏ dư thừa
1 Database Design, 2nd Edition by Adrienne Watt
Thiết kế cơ sở dữ liệu

Các dạng chuẩn (NF)

Sắp xếp từ ít đến nhiều chuẩn hóa:

  • Dạng chuẩn một (1NF)
  • Dạng chuẩn hai (2NF)
  • Dạng chuẩn ba (3NF)
  • Dạng chuẩn khóa sơ đẳng (EKNF)
  • Dạng chuẩn Boyce–Codd (BCNF)

$$

  • Dạng chuẩn bốn (4NF)
  • Dạng chuẩn bộ thiết yếu (ETNF)
  • Dạng chuẩn năm (5NF)
  • Dạng chuẩn miền–khóa (DKNF)
  • Dạng chuẩn sáu (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Thiết kế cơ sở dữ liệu

Quy tắc 1NF

  • Mỗi bản ghi phải duy nhất - không trùng hàng
  • Mỗi ô chỉ chứa một giá trị

Dữ liệu ban đầu

| 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        |
Thiết kế cơ sở dữ liệu

Ở dạng 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  | 
Thiết kế cơ sở dữ liệu

2NF

  • Phải thỏa 1NF
    • Nếu khóa chính chỉ 1 cột
      • thì tự động thỏa 2NF
    • Nếu khóa chính là khóa tổng hợp
      • thì mỗi cột không khóa phải phụ thuộc vào tất cả khóa

Dữ liệu ban đầu

| 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     |
Thiết kế cơ sở dữ liệu

Ở dạng 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 |
Thiết kế cơ sở dữ liệu

3NF

  • Thỏa 2NF
  • Không có phụ thuộc bắc cầu: cột không khóa không được phụ thuộc vào cột không khóa khác

Dữ liệu ban đầu

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
Thiết kế cơ sở dữ liệu

Ở dạng 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 |
Thiết kế cơ sở dữ liệu

Bất thường dữ liệu

Rủi ro nếu không chuẩn hóa đủ?

1. Bất thường cập nhật

2. Bất thường chèn

3. Bất thường xóa

Thiết kế cơ sở dữ liệu

Bất thường cập nhật

Không nhất quán dữ liệu do dư thừa khi cập nhật

| 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       |

Để cập nhật email của sinh viên 520:

  • Phải sửa hơn một bản ghi, nếu không sẽ không nhất quán
  • Người cập nhật cần biết về dư thừa
Thiết kế cơ sở dữ liệu

Bất thường chèn

Không thể thêm bản ghi do thiếu thuộc tính

| 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       |

Không thể thêm sinh viên đã đăng ký tài khoản nhưng chưa ghi danh khóa nào

Thiết kế cơ sở dữ liệu

Bất thường xóa

Xóa bản ghi gây mất dữ liệu ngoài ý muốn

| 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       |

Nếu xóa sinh viên 230, điều gì xảy ra với dữ liệu về Cleaning Data in R?

Thiết kế cơ sở dữ liệu

Bất thường dữ liệu

Rủi ro nếu không chuẩn hóa đủ?

1. Bất thường cập nhật

2. Bất thường chèn

3. Bất thường xóa

Cơ sở dữ liệu càng chuẩn hóa, càng ít gặp bất thường dữ liệu

Đừng quên nhược điểm của chuẩn hóa ở video trước

Thiết kế cơ sở dữ liệu

Ayo berlatih!

Thiết kế cơ sở dữ liệu

Preparing Video For Download...