2011-12-20 58 views
10

Tôi đang xây dựng trang web thương mại điện tử và muốn giảm giá cho một số mặt hàng nhất định trong một khoảng thời gian giới hạn.làm cách nào để giảm giá cho các mặt hàng trong cơ sở dữ liệu?

bảng Product My (MySQL) trông như thế này:

 
Product 
    - productId 
    - Name 
    - Weight 
    - Price (price as on the cover of the item) 

Tôi có nên thực hiện một bảng cho giao dịch:

 
Deals 
- dealID 
- productID (Foreign Key) 
- discount (fractional value: percentage) 
- description 

Đối với các mặt hàng lấy:

  • q1: Tìm tất cả sản phẩm trong sản phẩm có productID = tất cả productID trong bảng giao dịch
  • q2: Cập nhật giá với chiết khấu từ bảng giao dịch
  • q3: trả lại tất cả các sản phẩm

Có cách nào tốt hơn để làm điều này? Ngoài ra, làm cách nào để xử lý trường hợp giao dịch có sẵn chỉ trong một thời gian giới hạn?

EDIT: Tôi muốn hiển thị số tiền giảm giá mà chúng tôi đang cung cấp cho mỗi sản phẩm. Do đó, tôi cần hai giá trị cho mỗi sản phẩm, giá gốc và giá chiết khấu cho thời lượng đã cho.

tôi đăng một followup vào dung dịch bằng crontab here

Trả lời

8

Bạn có thể xem xét thêm dấu thời gian bắt đầu và dấu thời gian kết thúc vào bảng Deals của mình. Bằng cách đó, bạn có thể kiểm tra để đảm bảo ngày hiện tại nằm giữa ngày bắt đầu và ngày kết thúc cho giao dịch.

Bảng Deals của bạn không thực sự cần dealID - nó có thể được khóa với số productID và ngày bắt đầu giảm giá. Ngoài ra, tùy thuộc vào mức giá có thể cao đối với một mặt hàng cụ thể, hãy nhớ đặt trường discount của bạn một cái gì đó đủ chính xác (chẳng hạn như DECIMAL 12,8).

Nếu là tôi, tôi sẽ thực sự rời khỏi giá tắt của bảng Product và tạo ra một bảng ProductPricing thay vì tạo một bảng Deals. Bảng ProductPricing đó sẽ bao gồm productID và dấu thời gian bắt đầu làm trường khóa, sau đó cũng có dấu thời gian kết thúc để cho biết khi giá đó thay đổi. Và, tất nhiên, giá của mặt hàng đó.

+0

với bảng giá sản phẩm, thậm chí bạn có thể không cần bảng giao dịch .. ngày tháng là khóa. – Randy

+1

@Randy: đó là lý do tại sao tôi nói "thay vì tạo bảng Thỏa thuận". ;) – Crontab

+0

@Crontab cách tiếp cận ProductPricing là một giải pháp tốt đẹp vì nó có lợi ích bổ sung cho phép điều chỉnh giá cho các sản phẩm không có nguồn gốc từ một giao dịch/khuyến mãi (ví dụ như tăng giá). Bạn thậm chí có thể lưu trữ lý do cho sự thay đổi giá cuối cùng trên bảng ProductPricing. –

1

Tôi sẽ sử dụng một số thập phân cho cột giảm giá đề xuất.

giá * giảm giá = $ lượng tắt

giá - $ lượng off = giá trong giỏ

Đối với thời gian giới hạn bạn có thể đặt trong một cột ngày hết hạn, và chỉ trả lại hàng mà không phải là hết hạn.

2

Một điều khác cần xem xét là, làm thế nào để bạn mô hình hóa tình huống khi không có giảm giá cho một mục nhất định? Bạn có thể sử dụng mẫu Null Object ở đây - về cơ bản, khi một sản phẩm được tạo, bạn cũng thêm giao dịch trên sản phẩm đó với chiết khấu 0% và thời gian không giới hạn. Bằng cách đó, bạn có thể đơn giản hóa logic truy xuất sản phẩm của bạn (không có tham gia bên ngoài trong truy vấn, không có if để tính giá).

0

tôi sẽ bổ sung discountPrice, discountPercentage, endDiscountDate cột vào bảng Product và tạo lịch sử giảm giá bảng để giữ theo dõi

Sau đó giảm giá khi chọn không cần phải tham gia vào bảng, bạn có thể chọn giá đúng bởi kiểm endDiscountDate

Các vấn đề liên quan