【问题标题】:MySQL Database; best schemaMySQL数据库;最佳模式
【发布时间】:2009-12-02 15:21:30
【问题描述】:

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

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

[蓝牙]是的

[相机] 3 - 5 兆像素。

等等

将这些过滤器存储在数据库中的最佳方式是什么?这是我目前所拥有的:

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

这只是一个想法,但它永远不会返回带有过滤器“百万像素”值介于 3 和 5 之间的广告,因为 filter_value 的类型是 VARCHAR

【问题讨论】:

  • 该架构图看起来很漂亮。请问你是用哪个程序制作的?
  • 叫WWW SQL Designer,在线工具:ondras.zarovi.cz/sql/demo

标签: php mysql filter


【解决方案1】:

您是否考虑过额外的表 filter_value_list,其中包含列 id、filter_id 和 value?此表将包含一个 VARCHAR 答案列表,这些答案将以下拉列表的形式提供给用户,每个过滤器链接到所放置的广告类别。

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

优点:

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

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

  3. 所有广告的一致性。

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

【讨论】:

  • 嗨拉里,感谢您的评论!所以,你说的是:不会有特定类型的过滤器值,如 INT 和 VARCHAR,而只有 VARCHAR。你说得对,就是有这四个优点。然而,人们不得不在描述中添加百万像素数量的确切值(例如“3.2MP”),因为他们只能选择“3 到 5 百万像素”。这不像在广告页面上添加一个滑块那么容易,您可以在其中选择百万像素从 2 - 8 或 6 - 8 的产品。当然,这不仅仅是百万像素;)所以,谢谢你的想法,但也许还有更好的:]
  • 是的,确实用户不能添加随机值。但是,如果您愿意,可以为所有常见分辨率创建值,而不是使用范围。重要的是,答案是否始终符合定义的类别对您来说是否更重要。
【解决方案2】:

我会使用以下表格:

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

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

【讨论】:

  • 这没什么用。它只会引出更多问题。
  • 我猜你是对的。这不是答案。这只是以后的好建议。我将对其进行编辑以包含实际答案。
【解决方案3】:

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

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

【讨论】:

  • 单列主键使前端编程更加容易。 filter_value 是由放置广告的人指定的值,用于描述所宣传的单个项目。我放置在网站上的摄像头可能会显示“蓝牙”的“是”,但您的摄像头可能会显示“否”。
猜你喜欢
  • 2012-05-28
  • 2015-08-29
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多