Drupal Consultant
Started my career as a drupal8 developer in EM Solutions . I love learning Web technologies like HTML, CSS, PHP, Jquery Ajax and Drupal backend . Currently working as a drupal backend developer.
Dù có nhiều ý kiến trái ngược nhưng chuẩn hóa CSDL là một việc quan trọng để có được một CSDL tốt: không còn các dị thường (update anomaly, insertion anomaly, deletion anomaly), không có dư thừa dữ liệu.
Bài này trình bày mục tiêu của chuẩn hóa, các vấn đề mà chuẩn hóa giải quyết, đồng thời trình bày một số ví dụ chuẩn hóa CSDL cho một số ứng dụng trong thực tế (Hóa đơn hàng, Cửa hàng thuốc, Nhân sự, …). Qua đó, người đọc có thể nắm bắt kĩ thuật chuẩn hóa dễ dàng hơn.
Trong đa số các trường hợp (đặc biệt là trong những trường hợp CSDL nhỏ, chỉ vài chục bảng) thì dạng chuẩn 3NF hoặc BCNF là đạt yêu cầu. Các điều kiện để chuẩn hóa lên 4NF, 5NF, 6NF rất hiếm khi xảy ra. Do đó, như một cách nhớ vui về qui tắc chuẩn hóa từ 1NF đến BCNF, hầu như bất kì ai khi tìm hiểu về chuẩn hóa CSDL đều biết đến câu thần chú sau:
“The key, the whole key, and nothing but the key, so help me Codd.“
Xem bảng dữ liệu về nhân công trong các dự án của một công ty như sau:
Project number | Project name | Employee number | Employee name | Rate category | Hourly rate |
---|---|---|---|---|---|
1023 | Madagascar travel site | 11 | Vincent Radebe | A | $60 |
1023 | Madagascar travel site | 12 | Pauline James | B | $50 |
1023 | Madagascar travel site | 16 | Charles Ramoraz | C | $40 |
1056 | Online estate agency | 11 | Vincent Radebe | A | $60 |
1056 | Online estate agency | 17 | Monique Williams | B | $50 |
Để ý cột Project name, dữ liệu về tên project lặp lại nhiều lần. Gây dư thừa dữ liệu.
Đây là dị thường xảy ra khi cập nhật CSDL. Với bảng CSDL này, cứ mỗi khi một nhân viên thay đổi địa chỉ, tất cả các bản ghi có địa chỉ của nhân viên đó phải được cập nhật. Nhưng vì lí do nào đó, trong trường hợp này, dữ liệu về địa chỉ không được cập nhật đầy đủ, gây ra dị thường.
Với bảng CSDL trên, khi có một giáo sư mới về trường, chưa kịp giảng dạy khóa nào thì thông tin về giáo sư này không thể đưa vào CSDL được. Dị thường đó được gọi là insert anomaly.
Trường hợp này, nếu giáo sư thôi không dạy một môn nào đó thì thông tin về ông ta mất hết.
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.
Ở đâ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.
Đây là đề số 4 môn Kĩ thuật phần mềm kì 7 khóa 49 của lớp ĐT12 khoa ĐTVT trường ĐH Bách Khoa HN. Khác với tutorial 1 ở trên dùng phương pháp làm phẳng, tôi dùng phương pháp tách nhóm lặp để đưa về dạng 1NF trước. Để biết về phương pháp tách nhóm lặp, xin xem thêm tutorial 3.
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:
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.
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:
Như vậy, ở dạng 2NF ta có 3 quan hệ:
Ở 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:
Như vậy, ở 3NF, chúng ta có 5 quan hệ sau:
Ở quan hệ Nhân viên, ta thấy Số CMT của NV-> Tên NV, Địa chỉ NV nhưng Số CMT của Nhân viên không quyết định Số ĐT NV (Nhân viên có thể có nhiều số ĐT như số cầm tay, số nhà, số cơ quan, …). Như vậy, vì Số CMT của NV là một thuộc tính quyết định (determinant) nhưng không phải khóa nên quan hệ Nhân viên chưa đạt BCNF, cần phải tách thành 2 quan hệ như sau:
Vậy, CSDL của chúng ta ở BCNF gồm 6 quan hệ sau:
Ở đâ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 ko )