Vấn đề dư thừa dữ liệu trong thiết kế Cơ sở dữ liệu

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:

Mau don hang

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:

Vấn đề dư thừa dữ liệu - Hình 1

Ở đâ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.

Quan he n-n

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

Vấn đề dư thừa dữ liệu - Hình 2

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 02 chúng ta được sơ đồ thực thể quan hệ như sau:

Thiết kế cơ sở dữ liệu - Thực thể 6

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 tiếp: Tạo cơ sở dữ liệu

Bài trước: Chuẩn hóa cơ sở dữ liệu – Bước quan trọng trong thiết kế CSDL

Nếu bạn có chỗ nào chưa rõ hoặc có quan điểm khác vui lòng thảo luận bên dưới.

Đối tác tuyển dụng