Database Normalization - Chuẩn hoá cơ sở dữ liệu
· 8 min read
1. Database Normalization
Normalization (Chuẩn hóa dữ liệu) là quá trình tổ chức các bảng và cột trong cơ sở dữ liệu quan hệ (Relational Database) nhằm giảm thiểu dữ liệu dư thừa và giữ vững tính toàn vẹn của dữ liệu. Chuẩn hóa thường được sử dụng để:
- Loại bỏ dữ liệu dư thừa (Eliminate redundant data):
- Giảm kích thước bảng, tối ưu dung lượng lưu trữ, và cải thiện tốc độ xử lý.
- Giảm thiểu sai sót và bất thường (Minimize errors and anomalies):
- Hạn chế các lỗi phát sinh khi thực hiện các thao tác dữ liệu như:
- Thêm dữ liệu (Insert).
- Sửa dữ liệu (Update).
- Xóa dữ liệu (Delete).
- Hạn chế các lỗi phát sinh khi thực hiện các thao tác dữ liệu như:
- Đơn giản hóa truy vấn (Simplify queries) và c ấu trúc cơ sở dữ liệu (Structure the database):
- Tối ưu hóa cách tổ chức dữ liệu để dễ dàng phân tích và truy vấn ý nghĩa từ dữ liệu.
Ý tưởng chính (💡):
- Trong một cơ sở dữ liệu được chuẩn hóa, mỗi bảng chỉ nên phục vụ một mục đích cụ thể duy nhất. Ví dụ:
- Bảng
Thông tin sản phẩmlưu các thông tin về sản phẩm. - Bảng
Giao dịch bán hànglưu các thông tin liên quan đến giao dịch. - Bảng
Thông tin khách hàngchứa thuộc tính khách hàng. - Bảng
Chi tiết cửa hànglưu thông tin cửa hàng.
- Bảng
Giải thích về ví dụ (Phân tích bảng dữ liệu):
Dữ liệu ban đầu (chưa chuẩn hóa) được hiển thị như sau:
| date | product_id | quantity | product_brand | product_name | product_sku | product_weight |
|---|---|---|---|---|---|---|
| 1/1/1997 | 869 | 5 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1/7/1997 | 869 | 2 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1/3/1997 | 1 | 4 | Washington | Washington Berry Juice | 90748583674 | 8.39 |
| 1/5/1997 | 1472 | 3 | Fort West | Fort West Cookies | 37276054024 | 8.28 |
Phân tích vấn đề trong dữ liệu chưa chuẩn hóa:
- Dữ liệu dư thừa (Redundant Data):
- Thông tin sản phẩm như
product_brand,product_name,product_sku, vàproduct_weightbị lặp đi lặp lại cho mỗi giao dịch. Ví dụ:Nationeel Grape Fruit Rollxuất hiện hai lần cho hai ngày khác nhau (1/1/1997 và 1/7/1997).
- Việc lưu trữ thông tin lặp vừa làm tốn dung lượng lưu trữ vừa dễ gây lỗi sai trong dữ liệu.
- Thông tin sản phẩm như
- Thiếu sự tách biệt giữa mục đích của bảng:
- Bảng hiện tại gộp chung nhiều thông tin (giao dịch, sản phẩm) vào một bảng duy nhất. Điều này làm cho bảng trở nên khó cập nhật và truy vấn:
- Nếu thông tin sản phẩm thay đổi (ví dụ: trọng lượng
product_weightđổi từ 17 thành 15), ta phải tìm và cập nhật cho tất cả hàng liên quan đến sản phẩm này, dẫn đến rủi ro sai sót.
- Nếu thông tin sản phẩm thay đổi (ví dụ: trọng lượng
- Bảng hiện tại gộp chung nhiều thông tin (giao dịch, sản phẩm) vào một bảng duy nhất. Điều này làm cho bảng trở nên khó cập nhật và truy vấn:
- Vấn đề ở quy mô lớn:
- Với quy mô nhỏ (chỉ vài dòng dữ liệu), vấn đề lặp dường như không đáng kể. Nhưng khi cơ sở dữ liệu mở rộng đến hàng triệu dòng, các vấn đề dư thừa và lỗi sẽ trở nên rất khó kiểm soát.
Dữ liệu chuẩn hóa:
Các thông tin được chuẩn hóa thành nhiều bảng như sau:
Bảng 1: Thông tin sản phẩm
- Lưu trữ thông tin cố định của sản phẩm, không bị lặp lại.
| product_id | product_brand | product_name | product_sku | product_weight |
|---|---|---|---|---|
| 869 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1 | Washington | Washington Berry Juice | 90748583674 | 8.39 |
| 1472 | Fort West | Fort West Cookies | 37276054024 | 8.28 |
Bảng 2: Giao dịch bán hàng
- Lưu trữ các thông tin thay đổi theo từng giao dịch.
| date | product_id | quantity |
|---|---|---|
| 1/1/1997 | 869 | 5 |
| 1/7/1997 | 869 | 2 |
| 1/3/1997 | 1 | 4 |
| 1/5/1997 | 1472 | 3 |
Lợi ích của dữ liệu chuẩn hóa:
- Loại bỏ dư thừa:
- Thông tin sản phẩm chỉ được lưu một lần duy nhất trong bảng sản phẩm. Việc chỉnh sửa thông tin sản phẩm trở nên dễ dàng.
- Giảm lỗi và bất thường:
- Khi có thay đổi về một giá trị (như
product_weight), ta chỉ cần sửa một dòng trong bảng sản phẩm. Điều này giảm thiểu khả năng sai sót khi phải sửa nhiều dòng.
- Khi có thay đổi về một giá trị (như
- Tăng hiệu suất và giảm chi phí:
- Cấu trúc chuẩn hóa giúp giảm số lượng dữ liệu lặp, từ đó giảm dung lượng lưu trữ và tăng tốc độ truy vấn.
- Dễ dàng mở rộng:
- Với hệ thống chuẩn hóa, việc thêm thông tin mới (như
store details) chỉ yêu cầu thêm một bảng mới, không cần thay đổi cấu trúc bảng hiện tại.
- Với hệ thống chuẩn hóa, việc thêm thông tin mới (như
2. Các loại chuẩn hóa và giải thích
2.1. First Normal Form (1NF) - Chuẩn hóa bậc 1:
Định nghĩa:
Một bảng đạt chuẩn 1NF khi mỗi ô dữ liệu trong bảng chỉ chứa một giá trị duy nhất, và các giá trị trong cột đều có cùng loại dữ liệu.
Ví dụ:
Bảng chưa đạt chuẩn 1NF:
| ID | Tên khách hàng | Số điện thoại |
|---|---|---|
| 1 | Minh | 0123456789, 0987654321 |
| 2 | Hà | 0123456789 |
- Vấn đề:
- Một ô dữ liệu có nhiều giá trị (ô
Số điện thoạicủa khách hàngMinhchứa 2 số). - Gây khó cho việc truy vấn và sửa đổi thông tin.
- Một ô dữ liệu có nhiều giá trị (ô
Chuyển sang dạng 1NF:
| ID | Tên khách hàng | Số điện thoại |
|---|---|---|
| 1 | Minh | 0123456789 |
| 1 | Minh | 0987654321 |
| 2 | Hà | 0123456789 |
- Lợi ích:
- Mỗi ô chỉ chứa một dữ liệu duy nhất.
- Bảng được tổ chức hợp lý, dễ truy vấn.
2.2. Second Normal Form (2NF) - Chuẩn hóa bậc 2:
Định nghĩa:
Một bảng đạt chuẩn 2NF nếu:
- Bảng đã đạt chuẩn 1NF.
- Mỗi cột không khóa phụ thuộc hoàn toàn vào khóa chính (Primary Key), không tồn tại phụ thuộc từng phần.