You are on page 1of 5

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:

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

Trung tâm đào tạo lập trình viên chuyên nghiệp iViettech
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

https://iviettech.vn
TotalAmount = ∑(𝐴𝑚𝑜𝑢𝑛𝑡)
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.

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

Dữ liệu ở bảng Product

Dữ liệu ở bảng Invoice

Trung tâm đào tạo lập trình viên chuyên nghiệp iViettech
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:

1 1 1

n
n

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

https://iviettech.vn
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.
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.

Trung tâm đào tạo lập trình viên chuyên nghiệp iViettech

You might also like