繁体   English   中英

MySQL数据库 最佳模式

[英]MySQL Database; best schema

我有一个关于人们可以在其中买卖东西的网站的数据库架构的问题。

当某人将广告添加到数据库时,他将选择类别并填写属于所选类别的过滤器,因此任何人都可以通过浏览至类别并选择以下过滤器来轻松找到其广告:

[蓝牙]是的

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

等等

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

架构http://img98.imageshack.us/img98/5089/database2.jpg

这只是一个主意,但绝不会将过滤器“ megapixels”的值发送回3到5之间的广告,因为filter_value的类型为VARCHAR

我会用表做的:

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

以您喜欢的任何方式存储它,但为了基于这些过滤器进行高效查询,请设置Solr并使用多面搜索。

根据我的说法,设计工作还不错,我很好奇您为什么在联接表中加入了一个额外的id字段,例如广告和类别之间。 我想你可以不用他们。 总体而言,该设计非常好,因为它使您可以在以后更改基表,例如广告。

另一件事是filter_value? 为何不能将其放入过滤器表?

您是否考虑过另一个具有表ID,filter_id和value的表filter_value_list? 该表将包含一个VARCHAR答案列表,该列表将以下拉列表的形式提供给用户,每个下拉列表都链接到要放置的广告类别。

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

优点:

  1. 用户选择而不是键入答案。

  2. 保证您的系统可以理解每个过滤器。

  3. 所有广告的一致性。

  4. 可能的值列表也可以在“添加/删除过滤器”侧边栏中使用,就像这些天在许多网站上看到的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM