代码之家  ›  专栏  ›  技术社区  ›  Harmen

MySQL数据库;最佳模式

  •  0
  • Harmen  · 技术社区  · 15 年前

    我有一个关于某个网站的数据库模式的问题,在那里人们可以买卖东西。

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

    [蓝牙]是的

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

    等等

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

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

    这只是一个想法,但它不会将价值为“百万像素”的广告送回3到5之间的过滤器,因为 filter_value 属于类型 VARCHAR .

    3 回复  |  直到 15 年前
        1
  •  0
  •   Larry Lustig    15 年前

    您是否考虑了一个额外的表,用列ID、筛选器ID和值筛选\u value_列表?此表将包含varchar答案列表,这些答案将以下拉列表的形式提供给用户,下拉列表中的每个筛选器都链接到要放置的广告类别。

    对于“蓝牙”过滤器,可能的值为“是”和“否”。对于“相机”过滤器,可能的值可能是“低于100万像素”、“1或200万像素”、“3至500万像素”、“5至1000万像素”、“超过1000万像素”(我们计划在这里采用未来的技术)。

    优点:

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

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

    3. 所有广告的一致性。

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

        2
  •  0
  •   Kamil Szot    15 年前

    我会用桌子做:

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

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

        3
  •  0
  •   Shiv    15 年前

    根据我的说法,这个设计工作得很好,我很好奇为什么在连接表中还包含了一个额外的ID字段,例如广告和类别之间的字段。我想你可以不用它们。总的来说,设计是相当好的,因为它可以让你更改基表,例如稍后的广告。

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