Vấn đề dư thừa dữ liệu trong thiết kế Cơ sở dữ liệu
Đăng ngày 22-04-2020
Trong hai bài học trước chúng ta đã đề cập đến vấn đề dư thừa dữ liệu trong thiết kế cơ sở dữ liệu, nhưng chưa làm rõ. Trong bài học này, chúng ta sẽ bàn về dư thừa dữ liệu và vấn đề mà nó gây ra khi sử dụng cơ sở dữ liệu.
Chúng ta cũng xem xét việc thiết kế cơ sở dữ liệu cho hệ thống đơn hàng như trong các bài trước:
Sau khi phân tích và lựa chọn các trường dữ liệu ta có danh sách các trường dữ liệu như sau:
Bảng Invoice
InvoiceNo: Số hóa đơn
InvoiceDate: Ngày ghi hóa đơn
CustomerName: Tên khách hàng
CustomerCompany: Tên công ty khách hành
CustomerAddress: Địa chỉ khách hàng
CustomerAccountNo: Số tài khoản của khách hàng
PaymentMethod: Phương thức thanh toán
CustomerTaxNo: Mã số thuế của khách hàng
SequenceNo: Số thứ tự mua hành
ProductName: Tên sản phẩm
Unit: Đơn vị tính của sản phẩm
Quantity: Số lượng
UnitPrice: Đơn giá
Amount: Thành tiền
TotalAmount: Tổng tiền
VAT: Thuế giá trị gia tăng
TotalPay: Tổng tiền phải trả
ByText: Ghi bằng chữ
Bây giờ chúng ta sẽ xem xét các vấn đề mà dư thừa dữ liệu gây ra.
Dư thừa dữ liệu dẫn đến sai sót
Nếu để tất cả các trường này vào bảng Invoice và nhập dữ liệu cho nó, chúng ta sẽ thấy như sau:
Ở đây chúng ta thấy có nhiều trường dữ liệu nhập lặp lại và người sử dụng sẽ nhập tắt ở các dòng sau. Những dữ liệu viết tắt hay “nt” con người có thể hiểu được nhưng máy tính sẽ hiểu đó là các dữ liệu khác nhau nên dẫn đến sai sót.
- Dư thừa dữ liệu dẫn đến sai sót, do vậy bạn cần loại bỏ việc dư thừa dữ liệu khi thiết kế bằng cách chia bảng dữ liệu ra thành các bảng nhỏ hơn.
Vì sao phải loại bỏ các trường tính toán
Trong ví dụ trên chúng ta thấy có các trường tính toán được như:
Amount = Quantity * UnitPrice
TotalAmount = ∑(Amount)
TotalPay = TotalAmount (1 + VAT)
TotalPayByText: đọc thành chữ của TotalPay
Chúng ta quan sát trường Amount nếu vì lý do gì đó bạn để người dùng nhập vào trường này thì có khả năng họ sẽ nhập Amount khác với giá trị Quantity * UnitPrice, điều này dẫn đến sai sót.
Nếu bạn không cho người dùng nhập mà cho chương trình tính toán giá trị này và vẫn lưu nó thì khi bạn thay đổi giá chẳng hạn mà quên cập nhật trường Amount thì vẫn dẫn đến sai sót.
Chính vì vậy các trường tính toán được cũng là các trường dư thừa dữ liệu và có khả năng gây ra sai sót. Do vậy, các bạn không nên lưu các trường tính toán được ngoại trừ những trường hợp đặc biệt.
Vì sao phải chuyển quan hệ n-n sang các quan hệ 1-n
Trong bài thiết kế Cơ sở dữ liệu ở trên, chúng ta có đề cập khi gặp quan hệ n-n bạn cần thêm bảng mới và tách quan hệ đó ra thành các quan hệ 1-n nhưng chưa giải thích lý do vì sao. Ở phần này chúng ta xem xét vấn đề này.
Trong quan hệ này, đối chiếu với qui tắc chuẩn hóa bảng Product đã ở chuẩn 3 nên chúng ta không xem xét. Chúng ta sẽ xem xét bảng Invoice.
Nhập dữ liệu hóa đơn trên vào các bảng ở trên chúng ta sẽ thấy như sau:
Dữ liệu ở bảng Customer
Dữ liệu ở bảng Product
Dữ liệu ở bảng Invoice
Các bạn sẽ thấy các giá trị ở vùng bôi đen có giá trị lặp đi lặp lại và dẫn đến sai sót nên bạn cần phải tách phần này ra thành bảng riêng để thành hai bảng Invoice và InvoiceDetails như đã trình bày bên bài Thiết kế cơ sở dữ liệu.
- Quan hệ n-n chứa dư thừa dữ liệu và có khả năng gây sai sót nên bạn cần thêm bảng và tách chúng ta thành các quan hệ 1-n để giảm dư thừa dữ liệu.
Kết quả thiết kế cơ sở dữ liệu đúng
Sau khi tách các bảng ra và đưa về chuẩn 3 chúng ta được sơ đồ thực thể quan hệ như sau:
Bây giờ chúng ta sẽ xem xét dữ liệu lưu trữ của hóa đơn trên sau khi chuẩn hóa như thế nào:
Dữ liệu trên bảng Invoice
Dữ liệu trên bảng InvoiceDetails
Chúng ta thấy việc dư thừa dữ liệu đã giảm hẳn, việc dữ liệu lặp lại chỉ còn ở các trường khóa ngoại nên sẽ dễ kiểm soát hơn và ít sai sót hơn.
Chính vì thế trong thiết kế cơ sở dữ liệu người ta không dùng từ loại bỏ dư thừa dữ liệu mà dùng từ giảm dư thừa dữ liệu.
Kết luận
Việc giảm dư thừa dữ liệu trong thiết kế cơ sở dữ liệu là việc làm quan trọng nhằm giúp chúng ta giảm sai sót trong quá trình khai thác cơ sở dữ liệu. Việc đưa các bảng về chuẩn 3 sẽ giúp giảm tối đa việc dư thừa dữ liệu, do đó khi thiết kế các bạn cần áp dụng việc này.
Bài trước: Chuẩn hóa cơ sở dữ liệu – Bước quan trọng trong thiết kế CSDL