2011-12-08 16 views
7

Estoy creando una sencilla aplicación web de búsqueda de productos donde el usuario puede filtrar los productos de las compras que ha marcados sobre la base del precio, la entrega gratuita, nombre, tienda etc.cómo crear un esquema de base para el almacenamiento de los filtros de búsqueda de productos

Estoy buscando implementar la funcionalidad de filtros de búsqueda personalizados donde el usuario puede crear un filtro de búsqueda y luego guardarlo para usarlo más adelante. Los filtros de búsqueda son algo como esto:

  • precio es $ 1000
  • precio está entre $ 1000 a $ 2000
  • entrega gratuita disponible/no disponible
  • tienda es Amazon/Walmart/...
  • el nombre contiene "navidad"

¿Alguien me puede dar una idea del esquema de la base de datos para almacenar dichos filtros de búsqueda en la base de datos. Debo guardar las cláusulas de MySQL en la base de datos como "donde el precio < 1000", "DONDE free_delivery = 1" ... o puede ser crear campos como este ..

  • campo (precio, nombre, free_delivery)
  • valor (1000)
  • expr (menor que, mayor que)
  • entre (1000)
  • y (2000)
  • contiene

Respuesta

1

No debe almacenar cláusulas SQL en la base de datos. Yo recomendaría que hacer algo como esto:

CREATE TABLE store (
id INT NOT NULL PRIMARY KEY, 
name VARCHAR(100) 
); 

Ejemplo filas: (1, "Amazonas"), (2, "Walmart"), ...

CREATE TABLE search_filter (
id INT NOT NULL PRIMARY KEY, 
user_id INT NOT NULL, 
name VARCHAR(100), 
price_min INT, 
price_max INT, 
store_id INT, 
has_free_delivery BOOLEAN, 
keyword VARCHAR(50), 
FOREIGN KEY (user_id) REFERENCES user(id), 
FOREIGN KEY (store_id) REFERENCES store(id) 
); 

fila Ejemplo: (1 , 43, "amazon christmas", 1000, 1999, 1, True, "christmas")

El ejemplo anterior guardará un filtro llamado "amazon christmas" asociado con el usuario 43. Especifica que el usuario desea buscar productos con precios que van desde $ 1000 a $ 1999 en Walmart, con entrega gratuita, y que contienen la palabra clave "navidad".

+0

Solo una nota sobre esta respuesta para que esto funcione se le requerirá que especifique sus tablas como INNODB en lugar del valor predeterminado de MyISAM. Como se puede ver en http://dev.mysql.com/doc/refman/5.6/en/ansi-diff-foreign-keys.html, indican "En una etapa posterior, las restricciones de clave externa se implementarán para las tablas MyISAM como bien." este mismo texto ha estado presente para todas las versiones durante los últimos 8 años más o menos. Además, incluso si utiliza INNODB, no se garantiza que la clave externa se adhiera también. Se sabe que MySQL hace caso omiso de claves externas a veces. – Peter

+0

Gracias Peter, no estaba al tanto de esa restricción. – andebauchery

Cuestiones relacionadas