Bài dịch được thực hiện bởi Hoàng Văn Cương, lập trình viên Spring Boot làm việc Techmaster từ tháng 5/2020.
Bài viết được dịch từ www.guru99.com/database-normalization.html
Chuẩn hóa là gì?
Chuẩn hóa là một kỹ thuật thiết kế CSDL giúp giảm bớt sự dư thừa dữ liệu và loại bỏ những đặc điểm không mong muốn như Insertion, Update and Deletion Anomalies. Các quy tắc chuẩn hóa chia những bảng lớn thành các bảng nhỏ hơn và kết nối chúng bằng cách dùng quan hệ. Mục đích chuẩn hóa trong SQL nhằm loại bỏ dữ liệu thừa (lặp lại) và đảm bảo dữ liệu được lưu trữ một cách logic.
Người sáng chế ra mô hình quan hệ - Edgar Codd đã trình bày thuyết chuẩn hóa dữ liệu bằng sự giới thiệu của First Normal Form (dịch thô sẽ là dạng chuẩn hóa thứ nhất) và ông vẫn tiếp tục mở rộng học thuyết với Second và Third Normal Form. Sau đó, ông tham gia gia với Raymond F. Boyce để phát triển học thuyết của Boyce-Codd Normal Form (BCNF ở tiêu đề).
Danh sách Normal Forms:
- 1NF (First Normal Form)
- 2NF (Second Normal Form)
- 3NF (Third Normal Form)
- BCNF (Boyce-Codd Normal Form)
- 4NF (Fourth Normal Form)
- 5NF (Fifth Normal Form)
- 6NF (Sixth Normal Form)
Học thuyết Data Normalization (sau đây sẽ gọi là Chuẩn hóa Dữ liệu) trong SQL server vẫn đang được phát triển. Ví dụ, vẫn còn có những thảo luận ngay ở trong 6th Normal Form. Tuy nhiên, trong phần lớn các ứng dụng thực tế, việc chuẩn hóa đạt được sự tối ưu ở 3rd Normal Form. Việc phát triển của học thuyết chuẩn hóa SQL được minh họa đưới đây:
Database Normal Forms
Ví dụ Chuẩn hóa Dữ liệu
Các ví dụ sẽ minh hoạ chuẩn hóa dữ liệu. Giả sử, một thư viện video chứa một kho dữ liệu của các bộ phim đã từng được thuê. Khi chưa có chuẩn hóa, tất cả các thông tin được lưu trữ trong một bảng duy nhất ở bên dưới. Hãy cùng tìm hiểu về chuẩn hóa với bảng này:
Bạn có thể thấy cột Movies Rented có nhiều giá trị. Chúng ta sẽ chuẩn hóa về 1st Normal Forms:
Chuẩn hoá cấp 1: First Normal Form
- Mỗi ô của bảng chỉ nên có duy nhất 1 giá trị.
- Mỗi bản ghi sẽ là duy nhất
Kết quả bảng trên sau khi thực hiện theo 1NF:
Trước khi tiến hành, hãy cùng hiểu về 1 vài điều sau:
Thế nào là 1 Khóa (Key)
Khóa là một giá trị thường được sử dụng để định danh duy nhất cho một bản ghi trong bảng. Khóa có thể là một cột hoặc kết hợp của nhiều cột.
Chú ý: Các cột trong bản 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 (non-key collumns).
Thế nào là Khóa chính – Primary Key
Một giá trị chính là một cột giá trị thường dùng để định danh duy nhất cho bản ghi của dữ liệu
Nó 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 được thêm vào.
Thế nào là khóa tổng hợp – Composite Key
Một khóa tổng hợp là một khóa chính được kết hợp bởi nhiều cột mà các cột này có thể định danh duy nhất cho bản ghi. Trong dữ liệu ví dụ, chúng ta có 2 người với cùng tên là Robert Phil nhưng sống ở 2 địa chỉ khác nhau.
Vì vậy, chúng ta sẽ yêu cầu tên đầy đủ và địa chỉ để có thể định danh duy nhất cho bản ghi đó.
Giờ chúng ta sẽ thử 2NF:
Chuẩn hoá cấp 2 (Second Normal Form)
- Nguyên tắc 1: Trước tiên phải tuân thủ nguyên tắc 1NF
- Nguyên tắc 2: Khóa chính là một cột đơn.
Khá rõ ràng rằng chúng ta không thể là gì hơn để đơn giản hóa dữ liệu theo 2NF trừ khi ta phân tách bảng trên ra.
Chúng ta chia bảng kết của 1NF thành 2 bảng: bảng 1 chứa thông tin thành viên; bảng 2 chứa thông tin về các bộ phim đã thuê.
Chúng ta thêm 1 cột là Membership_id là một khóa chính cho bảng 1. Các bản ghi sẽ là duy nhất khi dử dụng trường này.
Khóa Ngoại (Foreign Key)
Trong bảng 2, Membership_ID là khóa ngoại
Khóa ngoại đại diện cho khóa chính của một bảng khác. Nó giúp tạo kết nối giữa các bảng:
- Khóa ngoại có thể có thên khác với khóa chính
- Nó đảm bảo các dòng trong bảng này sẽ tương ứng với các dòng trong bảng khác.
- Không giống khóa chính, khóa ngoại không cần là duy nhất. Phần lớn giá trị của khóa ngoại sẽ có trùng lặp.
- Các khóa ngoại có thể là null du cho khóa chính không thể.
Tại sao chúng ta cần khóa ngoại?
Giả định rằng, 1 người thêm 1 bản ghi vào bảng B như sau:
Bạn sẽ chỉ có thể thêm giá trị vào khóa ngoại khi nó đã tồn tại ở khóa chính trong bảng cha. Việc này giúp cho tính toàn vẹn tham chiếu
Vấn đề trên có thể giải quyết bằng cách khai báo membership id của bảng 2 giống khóa chính của membership id ở bảng 1
Bây giờ, nếu có ai muốn thêm 1 giá trị vào membership id nhưng không tồn tại ở bảng cha, lỗi sẽ xuất hiện.
Tính bắc cầu của phụ thuộc hàm là gì?
Tính bắc cầu của phụ thuộc hàm là khi thay đổi một cột không phải là khóa có thể dẫn đến việc các cột không phải khóa khác cũng sẽ phải thay đổi
Xem xét ở bảng 1. Thay khóa cột không phải là khóa – Full Name có thể dẫ đến việc phải thay đổi cột Salutation
Chuẩn hoá cấp 3 (Third Normal Form)
- Nguyên tắc 1: đảm bảo nguyên tắc của 2NF
- Nguyên tắc 2: Không có sự bắc cầu trong phụ thuộc hàm.
Để có thể chuyển bảng của 2NF thành 3NF chúng ta một lần nữa phải phân chia bảng:
Ví dụ về chuẩn hoá 3NF. Kết quả của việc phân chia 2NF thành 3NF như sau:
Chúng ta đã chia bảng và tạo 1 bảng mới để chứa trường Salutations
Chúng ta không còn bất kỳ sự ảnh hưởng trực tiếp nào do đó bảng đã đảm bảo 3NF
Trong bảng 3, Salutation ID là khóa chính và trong bảng 1 Salutation ID là khóa ngoại của nó.
Bây giờ, ví dụ của chúng ta đã ở mức không thể phân tách để đạt được dạng cao hơn của của chuẩn hóa và thực tế nó đã ở dạng cao nhất của chuẩn hóa. Các nỗ lực phân tách để đạt được dạng cao hơn thông thường sẽ cần phải có CSDL phức tạp hơn. Tuy nhiên, chúng ta sẽ bàn luận về các dạng tiếp theo một cách vắn tắt ở bên dưới.
Chuẩn hoá Boyce Codd BCNF
Ngay cả khi một CSDL đã ở 3rd Normal Form vẫn có thể có những kết quả dị thường nếu nó có nhiều hơn một khóa ứng viên – Candidate Key.
Đôi khi BCNF được biết đến là 3.5 Normal Form.
Chuẩn hoá cấp 4 (Fourth Normal Form)
Nếu không có cá thể bảng cơ sở dữ liệu nào chứa hai hoặc nhiều dữ liệu độc lập và nhiều giá trị mô tả thực thể có liên quan, thì nó ở 4th Normal Form.
Chuẩn hoá cấp 5 (Fifth Normal Form)
Một bảng là 5th Normal Form chỉ khi là 4NF và không thể bị phân tách thành các bảng nhỏ hơn mà không bị mất dữ liệu
Chuẩn hoá cấp 6 (Sixth Normal Form)
6th Normal Form chưa có quy chuẩn nhưng đang được thảo luận bởi những chuyên gia về CSDL.
Hết rồi đó, nhớ đến chuẩn hoá cấp 5 thì bạn yên tâm đi xin việc!
Tổng kết
- Thiết kế CSDL là mấu chốt để triển khai thành công một hệ thống quản lý CSDL đáp ứng được yêu cầu về dữ liệu của hệ thống doanh nghiệp
- Quy trình chuẩn hóa trong DBMS giúp giảm thiểu hệ thống CSDL gây ảnh hưởng đến hiệu năng và giúp ta có mô hình bảo mật tốt hơn
- Phụ thuộc hàm là một thành phần quan trọng trong quy trình chuẩn hóa dữ liệu
- Các hệ CSDL thường có thể được chuẩn hóa đến dạng thứ 3
- Khóa chính thì không được NULL
- Khóa phụ giúp kết nối các bảng và đại diện cho 1 khóa chính
Bình luận