Database Normalization - Normal Form 1nf 2nf 3nf?

Khám phá quy trình chuẩn hóa cơ sở dữ liệu với các dạng chuẩn 1NF, 2NF và 3NF để tối ưu hóa cấu trúc dữ liệu và tránh dư thừa.
Please wait 0 seconds...
Scroll Down and click on Go to Link for destination
Congrats! Link is Generated
Database Normalization - Normal Form 1nf 2nf 3nf?
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. 
Chuẩn hóa cơ sở dữ liệu là một nguyên tắc thiết kế cơ sở dữ liệu để tổ chức dữ liệu một cách có tổ chức và nhất quán (consistent).

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 bảng ở dạng chuẩn đầu tiên, nó phải đáp ứng các tiêu chí sau:
  • 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
Ví dụ: Hãy tưởng tượng chúng ta đang xây dựng một ứng dụng quản lý nhà hàng. Ứng dụng đó cần lưu trữ dữ liệu về nhân viên của công ty và nó bắt đầu bằng cách tạo bảng nhân viên sau:
EMPLOYEE_IDNAMEJOB_CODEJOBSTATE_CODEHOME_STATE
E001AliceJ01Chef26Michigan
E001AliceJ02Waiter26Michigan
E002BobJ02Waiter56Wyoming
E002BobJ03Bartender56Wyoming
E003AliceJ01Chef56Wyoming
Tất cả các mục nhập đều là nguyên tử và có khóa chính tổng hợp (employee_id, job_code) nên bảng ở dạng 1NF.
Nhưng ngay cả khi bạn chỉ biết ID nhân viên của ai đó, thì bạn có thể xác định tên, home_statestate_code của họ (vì họ phải là cùng một người). Điều này có nghĩa là tên, home_statestate_code phụ thuộc vào user_id (một phần của khóa tổng hợp chính). Vì vậy, bảng không ở dạng 2NF. Chúng ta nên tách chúng sang một bảng khác để tạo thành 2NF.

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)
Ví dụ:
Bảng employee_roles
EMPLOYEE_IDJOB_CODE
E001J01
E001J02
E002J02
E002J03
E003J01
Bảng employees
EMPLOYEE_IDNAMESTATE_CODEHOME_STATE
E001Alice26Michigan
E002Bob56Wyoming
E003Alice56Wyoming
Bảng jobs
JOB_CODEJOB
J01Chef
J02Waiter
J03Bartender

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.
Ví dụ:
Bảng employee_roles
EMPLOYEE_IDJOB_CODE
E001J01
E001J02
E002J02
E002J03
E003J01
Bảng employees
EMPLOYEE_IDNAMESTATE_CODE
E001Alice26
E002Bob56
E003Alice56
Bảng jobs
JOB_CODEJOB
J01Chef
J02Waiter
J03Bartender
Bảng states
STATE_CODEHOME_STATE
26Michigan
56Wyoming

Bây giờ cơ sở dữ liệu của chúng ta ở dạng 3NF.

Advantages

Ưu điểm của việc chuẩn hóa
  • 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

Nhược điểm của việc chuẩn hóa:
  • 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.

Đăng nhận xét

Tham gia cuộc trò chuyện