Mysql 如何创建用于存储产品搜索筛选器的数据库架构

Mysql 如何创建用于存储产品搜索筛选器的数据库架构,mysql,database-design,Mysql,Database Design,我正在创建一个简单的产品搜索webapp,用户可以根据价格、免费送货、姓名、店铺等筛选他收藏的购物产品 我期待实现自定义搜索过滤器功能,用户可以创建一个搜索过滤器,然后保存它供以后使用。搜索筛选器如下所示: CREATE TABLE store ( id INT NOT NULL PRIMARY KEY, name VARCHAR(100) ); 价格低于1000美元 价格在1000美元到2000美元之间 免费送货/不提供 商店是亚马逊/沃尔玛/ 名称包含“圣诞节” 有人能告诉我一个在数据

我正在创建一个简单的产品搜索webapp,用户可以根据价格、免费送货、姓名、店铺等筛选他收藏的购物产品

我期待实现自定义搜索过滤器功能,用户可以创建一个搜索过滤器,然后保存它供以后使用。搜索筛选器如下所示:

CREATE TABLE store (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(100)
);
  • 价格低于1000美元
  • 价格在1000美元到2000美元之间
  • 免费送货/不提供
  • 商店是亚马逊/沃尔玛/
  • 名称包含“圣诞节”
有人能告诉我一个在数据库中存储这种搜索过滤器的数据库模式吗。我是否应该在数据库中存储mysql子句,比如“WHERE price<1000”、“WHERE free_delivery=1”。。。或者可以创建如下字段

  • 字段(价格、名称、免费送货)
  • 价值(1000)
  • expr(小于、大于)
  • 介于(1000)之间
  • 和(2000年)
  • 包含

您不应该在数据库中存储SQL子句。我建议您这样做:

CREATE TABLE store (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(100)
);
示例行:(1,“亚马逊”),(2,“沃尔玛”)

示例行:(1,43,“亚马逊圣诞节”,10001999,1,True,“圣诞节”)


上面的示例将保存一个名为“amazon christmas”的过滤器,该过滤器与用户43关联。它指定用户希望在沃尔玛寻找价格从1000美元到1999美元不等、免费送货且包含关键字“圣诞节”的产品。

仅需注意此答案,您需要将表指定为INNODB,而不是MyISAM的默认值。从他们的声明中可以看出,“在稍后的阶段,MyISAM表也将实现外键约束。”在过去8年左右的时间里,所有版本都使用了相同的文本。此外,即使使用INNODB,也不能保证外键也会被遵守。众所周知,MySQL有时会忽略外键。谢谢Peter,我没有意识到这个限制。