Chuẩn hóa cơ sở dữ liệu là gì

Loại bỏ dư thừa dữ liệuLoại bỏ update anomalyLoại bỏ insertion anomalyLoại bỏ deletion anomaly

Các dạng chuẩn hóa dữ liệu

Chuẩn hoá là quá trình tách bảng [phân rã] thành các bảng nhỏ hơn dựa vào các phụ thuộc hàm.Các dạng chuẩn là các chỉ dẫn để thiết kế các bảng trong CSDL.

Bạn đang xem: Chuẩn hóa dữ liệu là gì

Mục đích của chuẩn hoá là loại bỏ các dư thừa dữ liệu và các lỗi khi thao tác dư thừa và các lỗi khi thao tác dữ liệu [Insert, Delete, Update].Nhưng chuẩn hoá làm tăng thời gian truy vấn.

Các dạng chuẩn hoá[Normal Form]

Dạng chuẩn 1 – 1NF [First Normal Form]

Định nghĩa:Một bảng [quan hệ] được gọi là ở dạng chuẩn 1NF nếu và chỉ nếu toàn bộ các miền giá trị của các cột có mặt trong bảng [quan hệ] đều chỉ chứa các giá trị nguyên tử [nguyên tố]

Ví dụ:

Một bảng [quan hệ] chưa ở 1NF:

MASVHOTENDIACHIMAMONTENMONDIEM
A01Lê Na12 Thái HàM01M02CSDLAnh89
A02Trần An56 Mã MâyM01CSDL8
A03Hà Nam24 Cầu GỗM01M02M03CSDLAnhToán 1689

Dạng chuẩn 2 – 2NF

Định nghĩaMột quan hệ ở dạng chuẩn 2NF nếu quan hệ đó:

Là 1NF

Các thuộc tính không khoá phải phụ thuộc hàm đầy đủ vào khoá chính

Ví dụ

Ví dụ1: Cho quan hệ R = [ABCD] , khoá là AB và tập phụ thuộc hàm F = {AB -> C, AB -> D}là quan hệ đạt chuẩn 2NF.

Ví dụ2: Cho quan hệ R = [ABCD] , khoá là AB và tập phụ thuộc hàm

F = {AB -> C, AB -> D, B -> DC} là quan hệ không đạt chuẩn 2NF vì có phụ thuộc hàm

B -> DC là phụ thuộc hàm bộ phận [phụ thuộc hàm không đầy đủ] vào khoá. Khi đó ta đưa về dạng chuẩn 2NF như sau:

Nhận xét

Một quan hệ ở dạng chuẩn 2NF nếu thoả mãn 1 trong các đièu kiện sau:Khoá chính chỉ gồm một thuộc tínhBảng không có các thuộc tính không khoáTất cả các thuộc tính không khoá phụ thuộc hoàn toàn vào tập các thuộc tính khoá chính

Dạng chuẩn 3 – 3NF

Định nghĩaMột quan hệ ở dạng chuẩn 3NF nếu quan hệ đó:

Là 2NFCác thuộc tính không khoá phải phụ thuộc trực tiếp vào khoá chính

Ví dụ

Ví dụ1: Cho quan hệ R = [ABCDGH, khoá là AB và tập phụ thuộc hàm F = {AB -> C, AB -> D, AB -> GH} là quan hệ đạt chuẩn 3NF.

Ví dụ2: Cho quan hệ R = [ABCDGH] , khoá là AB và tập phụ thuộc hàm

Dạng chuẩn BCNF [Boyce Codd Normal Form]

Định nghĩaMột quan hệ ở dạng chuẩn BCNF nếu quan hệ đó:

Là 3NF

Không có thuộc tính khoá mà phụ thuộc hàm vào thuộc tính không khoá.

Ví dụ

Ví dụ1: Cho quan hệ R = [ABCDGH, khoá là AB và tập phụ thuộc hàm F = {AB -> C, AB -> D, AB -> GH} là quan hệ đạt chuẩn BCNF.

Ví dụ2: Cho quan hệ R = [ABCDGH] , khoá là AB và tập phụ thuộc hàm

F = {AB -> C, AB -> D, AB -> GH, H -> B} là quan hệ không đạt chuẩn BCNF vì có thuộc tính khoá B phụ thuộc hàm vào thuộc tính không khoá H. Khi đó ta đưa về dạng chuẩn BCNF như sau:

Phương pháp chuẩn hóa

Nguyên lí cơ bản trong chuẩn hóa CSDL là triệt tiêu dư thừa dữ liệu bằng cách phân rã các quan hệ nhưng không được làm mất thông tin.Tutorial về chuẩn hóa CSDL

Tutorial 1 - Dùng phương pháp làm phẳng để chuẩn hóa 1NF

Ở đây có một tutorial rất hay về chuẩn hóa CSDL và vì đây là trang công nghệ thông tin chấm tiếng Việt nên tutorial đó cũng đã có bản tiếng Việt cho những bạn không thích tiếng Anh. Mời các bạn thảo luận về chuẩn hóa CSDL ở topic này.

Xem thêm: Những Cách Làm Giả Que Thử Thai Lên 2 Vạch ? Cách Để Giả Có Thai: 13 Bước

Tutorial 2 - Dùng phương pháp tách nhóm lặp để chuẩn hóa 1NF

Yêu cầu: thiết kế CSDL quản lí cửa hàng thuốc cần các thông tin sau:

DB[Mã hóa đơn, Ngày bán, Tổng tiền Hóa đơn, Mã khách hàng, Tên Khách hàng, Số ĐT Khách hàng, Mã Nhân viên, Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT Nhân viên [Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD, Số lượng, Thành tiền]].

Các phụ thuộc hàm:

Mã hóa đơn, Mã khách hàng, Mã nhân viên, Mã thuốc, xác định duy nhất 1 hóa đơn, 1 khách hàng, 1 NV, 1 loại thuốc.Một hóa đơn có thể có nhiều thuốc nhưng chỉ do một người mua và một nhân viên bán.Số CMT của NV-> Tên NV, Địa chỉ NV

1NF - Loại bỏ nhóm lặp và loại bỏ các thuộc tính tính toán.

Cần loại 2 thuộc tính tính toán sau: Tổng tiền hóa đơn và thành tiền. Vì đây chính là dữ liệu dư thừa.

Hóa đơn[Mã hóa đơn, Ngày bán, Mã khách hàng, Tên Khách hàng, Số ĐT Khách hàng, Mã Nhân viên, Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT NV]Hóa đơn - Thuốc[Mã hóa đơn, Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD, Số lượng]

2NF - Loại bỏ các phụ thuộc hàm không hoàn toàn vào khóa chính

Quan hệ Hóa đơn chỉ có khóa đơn nên quan hệ này đã ở 2NF.

Xét quan hệ Hóa đơn - Thuốc : Tên thuốc, Công dụng, Ngày SX, Hạn SD chỉ phụ thuộc vào Mã thuốc mà không phụ thuộc vào toàn khóa nên quan hệ này được tách làm 2 quan hệ sau:

Hóa đơn - Thuốc[Mã hóa đơn, Mã thuốc, Số lượng]Thuốc[Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD]

Như vậy, ở dạng 2NF ta có 3 quan hệ:

Hóa đơn[Mã hóa đơn, Ngày bán, Mã khách hàng, Tên Khách hàng, Số ĐT Khách hàng, Mã Nhân viên, Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT NV]Hóa đơn - Thuốc[Mã hóa đơn, Mã thuốc, Số lượng]Thuốc[Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD]

3NF - Loại bỏ các phụ thuộc hàm bắc cầu vào khóa chính

Ở quan hệ Hóa đơn, ta thấy Tên Khách hàng, Số ĐT Khách hàng chỉ phụ thuộc Mã khách hàng. Số CMT của NV, Tên NV, Địa chỉ NV chỉ phụ thuộc mã nhân viên. Do đó tách quan hệ này thành 3 quan hệ sau:

Hóa đơn[Mã hóa đơn, Ngày bán, Mã khách hàng, Mã Nhân viên]Khách hàng[Mã khách hàng, Tên Khách hàng, Số ĐT Khách hàng]Nhân viên[Mã Nhân viên, Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT NV]

Như vậy, ở 3NF, chúng ta có 5 quan hệ sau:

Hóa đơn[Mã hóa đơn, Ngày bán, Mã khách hàng, Mã Nhân viên]Khách hàng[Mã khách hàng, Tên Khách hàng, Số ĐT Khách hàng]Nhân viên[Mã Nhân viên, Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT NV]Hóa đơn - Thuốc[Mã hóa đơn, Mã thuốc, Số lượng]Thuốc[Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD]

Tutorial 3 - Chuẩn hóa về BCNFỞ đây có giáo trình CSDL [Bằng Tiếng Anh]đề cập về chuẩn hóa rất dễ hiểu. Trình bày khá sâu về anomaly, các dạng chuẩn giải quyết anomaly như thế nào.

Nói chung thì chuẩn hóa CSDL là việc nên biết trong khi học , Vì ngoài thực tế nếu mà đạt được chuẩn càng cao thì CSDL càng bị dư thừa - Tùy theo mục đích sử dụng mà chuẩn hóa hay không ].

Bài viết này sẽ giới thiệu đến bạn 3 bước chuẩn hóa NF Cơ sở dữ liệu.

  • Cách đọc UML Class Diagram
  • Tại sao Java không có cơ chế để Override thuộc tính của instance
  • Top 10 khóa học lập trình Java online dành cho người mới bắt đầu
  • Các phương pháp tự học lập trình web trực tuyến tốt nhất
  • Tổng hợp các khóa học lập trình web online free từ cơ bản đến nâng cao

Mục đích của việc chuẩn hóa NF Cơ sở dữ liệu

  1. Giảm thiểu dư thừa dữ liệu
  2. Loại bỏ các bất thường khi cập nhật cơ sở dữ liệu

Các kiểu chuẩn hóa cơ sở dữ liệu

Có 3 dạng chuẩn hóa cơ bản đó là:

– First Normal Form [1NF]: dạng chuẩn 1NF

– Second Normal Form [2NF]: dạng chuẩn 2NF

– Third Nomal Form [3NF]: dạng chuẩn 3NF

Các dạng chuẩn được sắp xếp theo thứ tự từ thấp đến cao. Để chuẩn hóa 2NF thì cơ sở dữ liệu của bạn phải đạt chuẩn 1NF, tương tự nếu đạt chuẩn 3NF thì phải đạt chuẩn 1NF và 2NF.

Dạng chuẩn 1NF

Cho 1 bảng như bên dưới:

Bảng có 3 khóa chính làcustomer_id,order_idvàproduct_id.

Bảng dữ liệu này vi phạm cả điều kiện của chuẩn 1NF vì:addresschứa các giá trị trùng lặp, hơn thế nữa, giá trịaddresstrong từng hàng không phải là đơn trị [chỉ có 1 giá trị], thêm vào đó, thuộc tínhtotal_amounthoàn toàn có thể tính toán được bằng cáchquantity * unit_price, không nhất thiết phải đưa vào bảng, gây ra dư thừa dữ liệu. Qua nhận xét trên, ta có thể hình dung ra 3điều kiệncần phải tuân theo đó là:

  • Các thuộc tính của bảng phải là nguyên tố
  • Giá trị của các thuộc tính trên các hàng phải là đơn trị, không chứa nhóm lặp
  • Không có một thuộc tính nào có giá trị có thể tính toán được từ một thuộc tính khác

Từ đó, ta có thể thiết kế lại bảng dữ liệu trên như sau:

  • Tách các thuộc tính lặp trong bảng như:customer_name,phonera thành một bảng mới làcustomers
  • Táchaddressthành một bảng riêng có khóa làcustomer_idđể biết địa chỉ đó thuộc vềcustomernào.
  • Loại bỏ thuộc tínhtotal_amount.

Kết quả như sau:

Dạng chuẩn 2NF

Quy tắcchuẩn hóa từ chuẩn 1NF thành 2NF:

Bước 1: Loại bỏ các thuộc tính không khóa phụ thuộc vào một bộ phận khóa chính và tách ra thành một bảng riêng, khóa chính của bảng là bộ phận của khóa mà chúng phụ thuộc vào.

Bước 2: Các thuộc tính còn lại lập thành một quan hệ, khóa chính của nó là khóa chính ban đầu.

Bảng dữ liệu mới mà ta thiết kế vẫn chưa đạt chuẩn 2NF là vì: một số thuộc tính

nhưdescription,unit_pricephụ thuộc vào 1 phần của khóa làproduct_idchứ không cần phụ thuộc cả vào tập khóa [customer_id,order_id,product_id], hay thuộc tínhcustomer_namevàphonecũng chỉ phụ thuộc vàocustomer_id, thuộc tínhorder_datephụ thuộc vàocustomer_idvàorder_id, thuộc tínhquantityphụ thuộc vàoorder_idvàproduct_id.

Vậy nên để đạt chuẩn 2NF thì ta sẽ thiết kế tiếp bảng dữ liệu chuẩn 1NF như sau:

  • Tách các thuộc tính [product_id,description,unit_price] thành một bảng riêng làproducts.
  • Các thuộc tính [customer_id,order_id,order_date] làm thành một bảng, mình đặt tên làorders.
  • Còn lại các thuộc tính [order_id,product_id,quantity] làm thành một bảng trung gian giữaproductsvàorders, mình đặt làorder_products.

Chỉ cần tuân thủ 2 chuẩn mà ta đã được cơ sở dữ liệu chuẩn hóa như sau:

Dạng chuẩn 3NF

Điều kiện:

  • Phải đạt chuẩn 2NF
  • Mọi thuộc tính không khóa phụ thuộc bắc cầu vào thuộc tính khóa [nghĩa là tất cả các thuộc tính không khóa phải được suy ra trực tiếp từ thuộc tính khóa]

Quy tắcchuẩn hóa từ 2NF thành 3NF:

Bước 1: Loại bỏ các thuộc tính phụ thuộc bắc cầu ra khỏi quan hệ và tách chúng thành quan hệ riêng có khóa chính là thuộc tính bắc cầu.

Bước 2: Các thuộc tính còn lại lập thành một quan hệ có khóa chính là khóa ban đầu.

Để ý thấy cơ sở dữ liệu mà ta thiết kế ở chuẩn 2NF cũng đã đạt chuẩn 3NF. Thế nên mình sẽ lấy một ví dụ khác để các bạn tham khảo như sau:

Ví dụ bảng sau vi phạm chuẩn 3NF:

Ta thấy thuộc tínhcountry_namephụ thuộc vàocountry_id, màcountry_idlại phụ thuộc vào khóa chính làid. Vì vậy ta nên tách bảng trên thành 2 bảng sau:

Author: Nguyễn Vũ Thành Tiến

Xem thêm các tài liệu, bài chia sẻ, hướng dẫn khác tại đây.

Đăng ký nhận bộ tài liệu kỹ năng dành cho lập trình viên [video hướng dẫn + slide] tại đây

Video liên quan

Chủ Đề