Cùng LPTECH tìm hiểu các loại chuẩn hoá trong CSDL Quan hệ quan trọng cho việc thiết kế cơ sở dữ liệu trong Thiết kế website. Đó là các chuẩn hóa cơ sở dữ liệu quan hệ. Thông thường, chủ đề này mang tính học thuật do vậy phù hợp hơn ở trung tâm, viện nghiên cứu. Tuy nhiên, việc hiểu biết những nguyên lý cơ bản của chuẩn hóa cơ sở dữ liệu và áp dụng chúng vào công việc thiết kế cơ sỡ dữ liệu hàng ngày mà chúng ta phải làm thực sự là không phức tạp mà còn giúp cải thiện hiệu năng hoạt động của cơ sở dữ liệu.
Cơ sở dữ liệu quan hệ là gì ?
RDBMS - Relational Database Management System là hệ quản trị cơ sở dữ liệu quan hệ được giới thiệu bởi E.F.Codd.
RDBMS là mô hình cơ bản cho ngôn ngữ SQL và cho tất cả các cơ sở dữ liệu hư MS SQL Server, IBM Server, IBM DB2, Oracle, MySQL và Microsoft Access
Chuẩn hóa CSDL là gì ?
Chuẩn hóa CSDL là để giúp cho việc tổ chức dữ liệu trong cơ sở dữ liệu một cách hiệu quả. Có hai mục đích chính để chuẩn hóa dữ liệu:
- Giảm lượng dữ liệu dư thừa (ví dụ như lưu trữ cùng một dữ liệu trong 1 bảng)
- Đảm bảo độc lập dữ liệu (dữ liệu liên quan đặt trong cùng 1 bảng) Cả 2 mục đích trên đều giúp giảm thiểu không gian sử dụng trong cơ sở dữ liệu và đảm bảo dữ liệu được lưu trữ một cách logic.
Các Chuẩn thông thường
Cộng đồng những người phát triển cở sở dữ liệu đã đưa ra 5 chuẩn được đánh số từ 1 (chuẩn 1 hoặc 1NF-Normal form) đến 5 (chuẩn 5 hoặc 5NF). Trong thực tế làm việc, chúng ta sẽ thường xuyên gặp 1NF, 2NF, 3NF và 4NF. Tuy nhiên, chuẩn 5 gần như là không gặp nên sẽ không bàn luận trong bài viết này.
Ngay bây giờ hãy cùng LPTech tìm hiểu qua các loại chuẩn hoá CSDL Quan hệ Phổ biến nào.
Chuẩn 1Normal Form - 1NF
Chuẩn 1 hay gọi tắt là 1NF là tập hợp các quy định cơ bản để tổ chức cơ sở dữ liệu như sau:
- Giảm cột dữ liệu dư thừa từ cùng 1 bảng
- Tạo các bảng riêng biệt cho mỗi nhóm dữ liệu liên quan đến nhau và định nghĩa mỗi dòng với một cột duy nhất (gọi là primary key) Để thỏa mãn các tiêu chí của chuẩn 1 chúng ta phải không được để trùng lặp các giá trị trong dòng của bảng. Nguyên lý này được gọi là nguyên tử hóa bảng (atomicity of table)và bảng như này gọi là bảng nguyên tử. Để hiểu hơn về chuẩn 1 chúng ta xem xét ví dụ sau: bảng quản lý nhân sự lưu trữ quan hệ giữa quản lý và nhân viên. Để hiểu rõ hơn về chuẩn hóa 1 chúng ta có quy tắc sau mỗi quản lý có một hoặc nhiều nhân viên nhưng mỗi nhân viên chỉ có duy nhất một quản lý.
Khi tạo bảng tính cho việc quản lý trên, chúng ta tạo một bảng có các cột sau:
- Manager
- Subordiante 1
- Subordiante 2
- Subordiante 3
- Subordiante 4
Tuy nhiên, khi áp chuẩn 1 vào chúng ta cần loại bỏ cột dữ liệu lặp trong cùng 1 bảng. Cụ thể trong trường hợp này, cột nhân viên 1,2,3,4 bị lặp lại. Nếu quản lý có 1 nhân viên thì cột nhân viên 2,3,4 sẽ thừa và như vậy gây lãng phí không gian lưu trữ. Hơn nữa, quản lý có 4 nhân viên rồi thì chuyện gì xảy ra khi có thêm nhân viên mới? Cấu trúc bảng lúc này sẽ phải chỉnh lại. Thay đổi cấu trúc bảng như sau:
- Manager
- Subordinates
Vì vậy, chúng ta không cần có nhiều cột nhân viên nữa mà sẽ chỉ còn 2 cột quản lý và nhân viên. Tuy nhiên, cột nhân viên lúc này có nhiều giá trị như “A,B,C”. Giải pháp này cũng ko được vì cột nhân viên vẫn có lặp dữ liệu và không duy nhất (non-atomic). Chuyện gì xảy ra khi chúng ta muốn thêm hoặc loại bỏ 1 nhân viên. Chúng ta sẽ phải đọc và ghi lại nội dung của cột đó. Nó sẽ không là vấn đề nếu như quản lý có ít nhân viên, nhưng nếu quản lý có hàng trăm nhân viên thì điều này là phức tạp cho việc xử lý truy vấn dữ liệu.
Hướng tiếp cận khác, cột nhân viên sẽ là duy nhất một giá trị, tuy nhiên cột quản lý sẽ có nhiều giá trị.
- Manager
- Subordinate
Bây giờ, vấn đề sẽ là tìm ra cột làm khóa chính. Với hướng tiếp cận như này thì cột nhân viên sẽ là khóa chính. Trong thực tế, lựa chọn trên có vẻ hợp lý khi mà mỗi nhân viên chỉ có duy nhất một quản lý. Tuy nhiên, chuyện gì sẽ xảy ra khi chúng ta thuê một nhân viên tên Nguyen Van A và chúng ta đã lưu trữ quan hệ của người này rồi.
Cách tốt nhất là sử dụng mã số duy nhất(employee ID) cho nhân viên làm khóa chính. Và bảng cuối cùng của chúng ta sẽ trông như sau:
- Manager ID
- Subordinate ID
Chuẩn 2Normal Form - 2NF
Chuẩn 2NF sẽ giúp các lập trình viên loại bỏ các giá trị trùng lặp. Khi thiết kế cơ cơ sở dữ liệu cho KH cần chú ý đến việc trùng lặp, hãy áp dụng chuẩn 2NF nhé:
- Bao gồm toàn bộ yêu cầu của chuẩn1.
- Xóa bỏ tập con dữ liệu trong nhiều hảng của 1 bảng và đặt chúng vào các bảng riêng biệt.
- Tạo quan hệ giữa các bảng mới thông qua sử dụng khóa ngoại (foreign keys)
Để hiểu rõ hơn chúng ta cùng tìm hiểu ví dụ sau: Bảng lưu trữ thông tin khách hàng của một shop online. Chúng ta có một bảng đơn gọi là Customers có các cột sau:
- CustNum
- FirstName
- LastName
- Address
- City
- State
- ZIP
Có một sự dư thừa nhỏ là chúng ta đang lưu trữ “Sea Cliff, NY 11579” and “Miami, FL 33157” 2 lần cho mỗi dòng. Điều này có thể không ảnh hưởng quá nhiều cho không gian lưu trữ nhưng nếu chúng ta ko hàng trăm trường hợp như vậy thì sẽ rất lãng phí không gian lưu trữ. Ngoài ra, nếu ZIP code cho Sea Cliff có bị thay đổi thì chúng ta cần thay đổi cho rất nhiều chỗ trong cơ sở dữ liệu.
Trong chuẩn 2, việc làm giảm thông tin dư thừa là tách ra và lưu trữ vào các bảng riêng biệt. Bảng mới của chúng có (gọi là bảng ZIPs) có những cột sau:
- ZIP
- City
- State
Như vậy, chúng ta sẽ loại bỏ được giá trị trùng lặp trong bảng Customers. Đấy là tiêu chí đầu tiên của chuẩn 1 đã được thỏa mãn. Chúng ta vẫn cần sử dụng khóa ngoại để nối 2 bảng lại với nhau. Chúng ta sử dụng ZIP code (khóa chính cho bảng ZIPs) để tạo quan hệ. Và đây là bảng Customers mới:
- CustNum
- FirstName
- LastName
- Address
- ZIP
Như vậy chúng ta đã làm giảm thiểu tối đa việc lặp thông tin và cấu trúc lại bảng theo chuẩn 2.
Chuẩn 3Normal Form - 3NF
Chuẩn 3 Normal Form sẽ áp dụng một số tiêu chí sau để đảm bảo tính tối ưu nhất của CSDL:
- Bao gồm tất cả yêu cầu của chuẩn 1 và chuẩn 2.
- Xóa bỏ những cột không phụ thuộc vào khóa chính
Để hiểu rõ hơn chúng ta xem xét ví dụ sau: Chúng ta có bảng orders bao gồm các thuộc tính sau:
- Order Number
- Customer Number
- Unit Price
- Quantity
- Total
Chú ý, điều đầu tiên là bảng của chúng ta cần phải thỏa mãn chuẩn 1NF, 2 NF. Có sự lặp cột dữ liệu không? - Không. Có khóa chính chưa ? - Có rồi, chính là cột order number. Do đó, bảng này thỏa mãn 1NF. Có tập con dữ liệu trong nhiều dòng ko ? - Không, vì thế bảng này cũng thỏa mãn 2NF.
Bây giờ, chúng ta cùng xem tất cả cột có phụ thuộc vào khóa chính không? Qua bảng trên chúng ta thấy cột total được xác định bằng unit price nhân với quantity. Do vậy cột này không phụ thuộc vào khóa chính. Và bảng của chúng ta lúc này chỉ sử dụng các thuộc tính sau:
- Order Number
- Customer Number
- Unit Price
- Quantity
Và bây giờ bảng của chúng ta đã thỏa mãn chuẩn 3NF. Và total lúc này không được lưu trữ trong cơ sở dữ liệu và được tính trực tiếp khi chúng ta truy vấn.
SELECT OrderNumber, UnitPrice*Quantity AS Total FROM Orders
Chuẩn 4 (4NF)
Cuối cùng, chuẩn 4 (4NF) có thêm một số yêu cầu sau:
- Tất cả yêu cầu của chuẩn 3
- Một quan hệ là chuẩn 4 nếu nó không có phụ thuộc nhiều giá trị Chú ý, các chuẩn hóa trên có tích chất tích lũy. Vì vậy, cơ sở dữ liệu đã đạt chuẩn 2 thì nó phải đạt đầy đủ tiêu chí của chuẩn 1.
Chuẩn Boyce-Codd (BCNF hoặc 3.5NF)
Chuẩn Boyce-Codd bao gồm các yêu cầu sau:
- Toàn bộ yêu cầu của chuẩn 3
- Mọi sự xác định phải là khóa ứng viên (candidate key) Ví dụ: bảng lưu thông tin của nhân viên có các thuộc tính sau: employee_id, first_name, last_name, title. Trong bảng này, cột emloyee_id giúp xác định first_name và last_name. Tương tự, cặp (first_name, last_name) cũng sẽ xác định được employee_id
Tóm lại, Các đơn vị thiết kế website hoặc các bạn đang là lập trình viên hãy luôn nhớ các tiêu chuẩn trên để áp dụng triệt để vào dự án của mình. Đem lại hiệu quả tốt nhất và chất lượng dự án cao. CSDL rất quan trọng nên việc thiết kế cơ sở dữ liệu quan hệ chiếm đến 50% chất lượng toàn dự án.
Thông tin liên hệ
Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .
Công ty TNHH TMĐT Công nghệ LP
Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.
Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC
Hotline: 0338 586 864
Mail: sales@lptech.asia
Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.