2011-12-20 8 views
10

Estoy construyendo un sitio de comercio electrónico y me gustaría ofrecer descuentos en ciertos artículos por tiempo limitado.cómo modelar el descuento en artículos en una base de datos?

Mi mesa Producto (MySQL) tiene el siguiente aspecto:

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

¿Debo hacer otra mesa para ofertas:

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

Para artículos recuperar:

  • Q1: Encuentra todos productos en productos con productID = todos los productIDs en la tabla de ofertas
  • Q2: Actualizar el precio con descuento a partir de la tabla ofertas
  • P3: devolver todos los productos

¿Hay una mejor manera de hacer esto? Además, ¿cómo manejo el caso de trato existente solo por un tiempo limitado?

EDIT: Me gustaría mostrar la cantidad de descuento que ofrecemos por producto. Por lo tanto, necesito dos valores por producto, precio original y precio de descuento para la duración dada.

he publicado una continuación de la solución propuesta por crontab here

Respuesta

8

Puede considerar agregar una marca de tiempo inicial y una marca de tiempo final a su tabla Deals. De esta forma, puede verificar para asegurarse de que la fecha actual sea entre las fechas de inicio y finalización del acuerdo.

Su tabla Deals realmente no necesita un dealID - se podría teclear con el productID y la fecha de inicio del descuento. Además, dependiendo de qué tan alto pueda ser el precio de un artículo determinado, recuerde hacer de su campo discount algo suficientemente preciso (algo así como DECIMAL 12,8).

Si fuera yo, de hecho me dejaría precio fuera de la mesaProduct y cree una tabla ProductPricing en lugar de crear una mesa Deals. Esa tabla ProductPricing consistiría en productID y una marca de tiempo inicial como campos clave, y luego también tiene una marca de tiempo final para indicar cuándo cambió ese precio. Y, por supuesto, el precio del artículo.

+0

con una tabla de precios del producto, es posible que ni siquiera necesite la tabla de ofertas ... las fechas son la clave. – Randy

+1

@Randy: por eso dije "en lugar de crear una tabla de Ofertas". ;) – Crontab

+0

@Crontab El enfoque ProductPricing es una buena solución ya que tiene el beneficio adicional de permitir ajustes de precios a productos que no se han originado en una oferta/promoción (por ejemplo, el precio aumenta). Incluso podría almacenar el motivo del último cambio de precio en la tabla ProductPricing. –

1

me gustaría utilizar un número decimal para la columna de descuento.

precio de descuento * = $ cantidad de

precio - $ = cantidad de precio en el carrito

Por tiempo limitado se puede poner en una columna de fecha de caducidad, y sólo devolver filas que no han caducado.

2

Otra cosa a considerar sería, ¿cómo modelar la situación cuando no hay descuento para un artículo dado? Puede utilizar un patrón Null Object aquí; básicamente, cuando se crea un producto, también agrega una oferta en ese producto con 0% de descuento y tiempo ilimitado. De esta forma, podría simplificar la lógica de recuperación de productos (sin combinaciones externas en la consulta, no if para calcular el precio).

0

yo añadiría discountPrice, discountPercentage, la columna endDiscountDate a la mesa Producto y crear la historia de descuento mesa para mantener descuento seguimiento

Luego, cuando seleccione hay necesidad de tabla de unión se puede elegir el precio correcto comprobando endDiscountDate

Cuestiones relacionadas