MySQL数据库;最好的架构

时间:2009-12-02 15:21:30

标签: php mysql filter

我对某个网站的数据库架构有疑问,人们可以在这个网站上销售和购买东西。

当有人向数据库添加广告时,他会选择类别并填写属于所选类别的过滤器,这样任何人都可以通过浏览到某个类别并选择以下过滤条轻松找到他的广告:

  

[蓝牙]是的

     

[相机] 3 - 5百万像素。

     

等等

将这些过滤器存储在数据库中的最佳方法是什么?这就是我到目前为止所做的:

Schema http://img98.imageshack.us/img98/5089/database2.jpg

这只是一个想法,但由于filter_value的类型为VARCHAR,所以它永远不会将广告返回过滤“百万像素”的值,因为{{1}}的类型为{{1}}。

3 个答案:

答案 0 :(得分:0)

我会用表格来表示:

  • 广告
  • 过滤器名称(类别只是过滤器之一)
  • 过滤值
  • 广告和过滤器值之间的关联

以您喜欢的方式存储它,但是基于这些过滤器进行有效的查询设置Solr并使用分面搜索。

答案 1 :(得分:0)

根据我的说法,设计工作得非常好,我很好奇为什么你在连接表中包含了一个额外的id字段,例如广告和类别。我想你可以没有他们。整体设计非常好,因为它可以让您更改基表,例如稍后的广告。

另一件事什么是filter_value?为什么不能进入过滤表?

答案 2 :(得分:0)

您是否考虑了一个附加表,filter_value_list,其中包含列id,filter_id和值?此表格将包含VARCHAR答案列表,这些答案将以下拉列表的形式提供给用户,每个过滤器都链接到正在放置的广告类别。

对于“蓝牙”过滤器,可能的值为“是”和“否”。对于“相机”滤镜,可能的值可能是“小于1百万像素”,“1或2百万像素”,“3至5百万像素”,“5至10百万像素”,“超过10百万像素”(我们是在这里规划未来的技术。)

优点:

  1. 用户选择答案而不是类型。

  2. 系统会保证您了解每个过滤器。

  3. 所有广告的一致性。

  4. 可能的值列表也可用于“添加/删除过滤器”侧栏,就像您现在在许多网站上看到的一样。