Thiết kế của ProductPricing
bảng cho phép chúng tôi không bao giờ phải xóa dữ liệu giá cũ (đôi khi ban quản lý muốn có một báo cáo dựa trên dữ liệu đó). Với những gì bạn đã mô tả ở trên, bạn sẽ bắt đầu như thế này (Tôi đã thay đổi ngày bắt đầu để dễ dàng nhận ra rằng có, đây là giá ban đầu khi hệ thống đi vào hoạt động):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Bây giờ, giả sử bạn đưa ra mức giá chiết khấu cho táo của mình và bạn muốn chủ động và thiết lập hệ thống cho thời điểm bán hàng kết thúc:
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Dec 20, 2011, 00:00:00 | 10$ | 10$
1 | Dec 20, 2011, 00:00:01 | Dec 26, 2011, 00:00:00 | 7.5$ | 10$
1 | Dec 26, 2011, 00:00:01 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Những gì chúng tôi đã làm ở đây là:
- Cập nhật bản ghi hiện có với dấu thời gian 2038, thay đổi
endDateTimeStamp
trường để phản ánh thời điểm bắt đầu bán hàng - Chèn một bản ghi mới để xác định việc bán hàng
- Chèn một bản ghi mới khác để phản ánh lại mức giá bình thường
Không có dấu thời gian chồng chéo, bạn được đảm bảo nhận được một bản ghi khi truy vấn cơ sở dữ liệu về giá của mình. Vì vậy,
SELECT p.Name, pp.price, pp.original_price
FROM Product p
INNER JOIN ProductPricing pp ON pp.productId = p.productId
WHERE NOW() BETWEEN pp.startDateTimeStamp AND pp.endDateTimeStamp
sẽ cung cấp cho bạn danh sách sản phẩm với giá hiện tại.