Database Normalization - Normal Form 1nf 2nf 3nf? |
What is Database Normalization?
Database normalization is a database design principle for organizing data in an organized and consistent way.
Nó giúp bạn tránh sự dư thừa (redundancy - rườm rà, thừa thãi) và duy trì tính toàn vẹn (integrity - chính trực, toàn vẹn) của cơ sở dữ liệu. Nó cũng giúp bạn loại bỏ (eliminate) các đặc điểm (characteristics - đặc trưng) không mong muốn (undesirable) liên quan đến việc chèn, xóa và cập nhật.
What is Purpose of Database Normalization?
The main purpose of database normalization is to avoid complexities, eliminate duplicates, and organize data in a consistent way. In normalization, the data is divided into several tables linked together with relationships.
Mục đích chính của việc chuẩn hóa cơ sở dữ liệu là tránh sự phức tạp, loại bỏ sự trùng lặp và sắp xếp dữ liệu một cách nhất quán. Trong quá trình chuẩn hóa, dữ liệu được chia thành nhiều bảng được liên kết với nhau bằng các mối quan hệ.
Quản trị viên cơ sở dữ liệu có thể đạt được các mối quan hệ này bằng cách sử dụng khóa chính, khóa ngoại và khóa tổng hợp.
Non-key columns: Các cột trong bảng không được sử dụng để định danh bản ghi là duy nhất được gọi là các cột không khóa.
Primary Key: Khóa chính là cột xác định duy nhất các hàng dữ liệu trong bảng đó. Khóa chính có một số thuộc tính sau:
- Khóa chính không thể NULL
- Giá trị của khóa chính phải là duy nhất
- Giá trị của khóa chính thường hiếm khi được thay đổi.
- Khóa chính phải được gán giá trị mỗi khi một bản ghi mới được thêm vào.
Foreign Key: Khóa ngoại là trường liên quan đến khóa chính trong bảng khác.
Composite Key: Khóa tổng hợp giống như khóa chính nhưng thay vì có một cột, nó có nhiều cột.
What is 1NF 2NF and 3NF?
1NF, 2NF và 3NF là 3 dạng chuẩn hóa cơ sở dữ liệu đầu tiên. Ngoài ra còn có BCNF, 4NF, 5NF và 6NF.
Tất cả các loại chuẩn hóa cơ sở dữ liệu đều mang tính tích lũy - nghĩa là mỗi loại được xây dựng dựa trên những loại bên dưới nó. Vì vậy, tất cả các khái niệm trong 1NF cũng được chuyển sang 2NF, v.v.
The First Normal Form - 1NF
- Một ô không được chứa nhiều hơn một giá trị (tính nguyên tử - atomicity)
- Phải có khóa chính để nhận dạng
- Không có hàng hoặc cột trùng lặp
- Mỗi cột chỉ được có một giá trị cho mỗi hàng trong bảng
EMPLOYEE_ID | NAME | JOB_CODE | JOB | STATE_CODE | HOME_STATE |
---|---|---|---|---|---|
E001 | Alice | J01 | Chef | 26 | Michigan |
E001 | Alice | J02 | Waiter | 26 | Michigan |
E002 | Bob | J02 | Waiter | 56 | Wyoming |
E002 | Bob | J03 | Bartender | 56 | Wyoming |
E003 | Alice | J01 | Chef | 56 | Wyoming |
The Second Normal Form - 2NF
1NF chỉ loại bỏ các nhóm lặp lại chứ không loại bỏ sự dư thừa. Đó là lý do tại sao có 2NF.
Một bảng được cho là ở mức 2NF nếu nó đáp ứng các tiêu chí sau:
- Phải tuân thủ các nguyên tắc của 1NF. Nói cách khác là nó đã ở dạng 1NF rồi.
- Không có sự phụ thuộc một phần. Nghĩa là tất cả các thuộc tính không khóa đều phụ thuộc hoàn toàn vào khóa chính. (Khóa chính là một cột đơn)
EMPLOYEE_ID | JOB_CODE |
---|---|
E001 | J01 |
E001 | J02 |
E002 | J02 |
E002 | J03 |
E003 | J01 |
EMPLOYEE_ID | NAME | STATE_CODE | HOME_STATE |
---|---|---|---|
E001 | Alice | 26 | Michigan |
E002 | Bob | 56 | Wyoming |
E003 | Alice | 56 | Wyoming |
JOB_CODE | JOB |
---|---|
J01 | Chef |
J02 | Waiter |
J03 | Bartender |
home_state hiện phụ thuộc vào state_code. Vì vậy, nếu bạn biết state_code thì bạn có thể tìm thấy giá trị home_state.
Để tiến thêm một bước nữa, chúng ta nên tách chúng lại thành một bảng khác để tạo thành 3NF.
The Third Normal Form - 3NF
Khi một bảng ở chế độ 2NF, nó sẽ loại bỏ các nhóm lặp lại và sự dư thừa, nhưng nó không loại bỏ sự phụ thuộc một phần bắc cầu.
Điều này có nghĩa là một thuộc tính không chính (thuộc tính không phải là một phần của khóa ứng viên) phụ thuộc vào một thuộc tính không chính khác. Đây là điều mà dạng chuẩn thứ ba (3NF) loại bỏ.
Vì vậy, để một bảng ở trạng thái 3NF, nó phải:
- Đảm bảo nguyên tắc của 2NF
- Không có sự phụ thuộc một phần bắc cầu.
EMPLOYEE_ID | JOB_CODE |
---|---|
E001 | J01 |
E001 | J02 |
E002 | J02 |
E002 | J03 |
E003 | J01 |
EMPLOYEE_ID | NAME | STATE_CODE |
---|---|---|
E001 | Alice | 26 |
E002 | Bob | 56 |
E003 | Alice | 56 |
JOB_CODE | JOB |
---|---|
J01 | Chef |
J02 | Waiter |
J03 | Bartender |
STATE_CODE | HOME_STATE |
---|---|
26 | Michigan |
56 | Wyoming |
Advantages
- Improve data consistency - Cải thiện tính nhất quán dữ liệu: Quy chuẩn hóa đảm bảo rằng mỗi mảnh dữ liệu chỉ được lưu trữ ở một nơi, giảm nguy cơ dữ liệu không nhất quán. Khi dữ liệu được cập nhật, chỉ cần cập nhật tại một nơi, đảm bảo tính nhất quán.
- Reduce Data Redundancy - Giảm dư thừa dữ liệu: Chuẩn hóa giúp loại bỏ dữ liệu trùng lặp bằng cách chia dữ liệu thành nhiều bảng có liên quan. Điều này có thể tiết kiệm không gian lưu trữ và cũng làm cho cơ sở dữ liệu hiệu quả hơn.
- Improve Query Performance - Cải thiện hiệu suất truy vấn: Cơ sở dữ liệu được chuẩn hóa thường dễ truy vấn hơn. Vì dữ liệu được sắp xếp hợp lý nên các truy vấn có thể được tối ưu hóa để chạy nhanh hơn.
- Make Data More Meaningful - Làm cho dữ liệu có ý nghĩa hơn: Chuẩn hóa bao gồm việc nhóm dữ liệu theo cách có ý nghĩa và trực quan. Điều này có thể làm cho cơ sở dữ liệu dễ hiểu và dễ sử dụng hơn, đặc biệt đối với những người không thiết kế cơ sở dữ liệu.
- Reduce the Chances of Anomalies - Giảm khả năng xảy ra sự bất thường: Sự bất thường là những vấn đề có thể xảy ra khi thêm, cập nhật hoặc xóa dữ liệu. Việc chuẩn hóa có thể làm giảm khả năng xảy ra những bất thường này bằng cách đảm bảo rằng dữ liệu được sắp xếp hợp lý.
Disadvantages
- Increased Complexity - Độ phức tạp tăng lên: Bình thường hóa có thể dẫn đến các mối quan hệ phức tạp. Một số lượng lớn các bảng có khóa ngoại có thể khó quản lý, dẫn đến nhầm lẫn.
- Reduced Flexibility - Giảm tính linh hoạt: Do các quy tắc chuẩn hóa nghiêm ngặt, việc lưu trữ dữ liệu không tuân thủ các quy tắc này có thể kém linh hoạt hơn.
- Increased Storage Requirements - Trong khi việc chuẩn hóa làm giảm sự dư thừa, có thể cần phải phân bổ thêm không gian lưu trữ để chứa các bảng và chỉ mục bổ sung.
- Performance Overhead - Chi phí hiệu suất: Việc tham gia nhiều bảng có thể tốn kém về mặt hiệu suất. Dữ liệu càng được chuẩn hóa thì càng cần nhiều kết nối, điều này có thể làm chậm thời gian truy xuất dữ liệu.
- Loss of Data Context - Mất bối cảnh dữ liệu: Quá trình chuẩn hóa chia dữ liệu thành các bảng riêng biệt, điều này có thể dẫn đến mất bối cảnh kinh doanh. Việc kiểm tra các bảng liên quan là cần thiết để hiểu ngữ cảnh của một phần dữ liệu.
- Need for Expert Knowledge - Cần có kiến thức chuyên môn: Việc triển khai cơ sở dữ liệu chuẩn hóa đòi hỏi sự hiểu biết sâu sắc về dữ liệu, mối quan hệ giữa dữ liệu và các quy tắc chuẩn hóa. Điều này đòi hỏi kiến thức chuyên môn và có thể tốn thời gian.