zoukankan      html  css  js  c++  java
  • 商品与标签

    商品与标签(或者检索分类,就是淘宝产品页面上面那些查询条件)的关系目前来说比较流行的数据表设计方法是:

    商品表

    -product_id

    -product_type

    -product_name

    标签定义表

    -tag_id

    -tag_name

    -count //该标签下商品数量

    商品标签关联表

    _product_id

    _tag_id

    当然,如果是noSQL就方便多了,可以这样:

    -tag_id

    -product_ids //该标签下所有商品的集合。

    其实不管是nosql还是关系型数据库,在处理时可以使用同样的方法,就是校方nosql,先将各个标签下的商品id加载到内存,然后根据查询条件求交集。

    举个例子:假设要实现如淘宝、京东一样的动态搜索条件,可以如下:

    定义标签表:

    tag_id

    type //如颜色、型号、品牌

    product_type_id// 关联某分类

    tag_name //名称

    举例,如电视:

    tag_id  type  tag_name

    100  品牌  海信

    101  品牌  创维

    102  尺寸  32寸

    103  尺寸  40寸

    上面是标签的定义,在数据库里保存标签和产品的关联,

    如使用关联表 {tag_id,product_id}

    或者使用{tag_id,product_ids/*产品id集合*/}

    最终我们是为了得到标签和产品的集合,求标签关联产品ID集合:

    tag_id 产品id集合 产品数量

    100  1001,1002  2

    101  1003     1

    102  1003       1

    103  1002,1004  2

    如果我们要查询“海信”下面的电视,我们只需要返回该标签下面的产品集合就可以了: {1001,1002}

    顺便为了动态隐藏其它标签,我们还需要该标签下面产品集合和其它所有标签下面的产品集合取交集,得到如下结果:

    tag_id 产品id集合  产品数量

    100  1001,1002  2

    101  -       0 

    102  -       0

    103   1002      1

    此时就可以隐藏掉102也就是32寸这个标签,因为海信下面没有这个尺寸的电视。

    还有一种做法是将标签直接存到产品表,这种做法便于搜索和存放,但不便于动态标签,如:

    -product_id  name      tags

    1001      平板电视    101,102,104

    标签用逗号分隔,放入产品的字段中。这样做搜索算法简单,只比较该字段就可以了,但产品过多的话效率很低。

  • 相关阅读:
    LeetCode "Super Ugly Number" !
    LeetCode "Count of Smaller Number After Self"
    LeetCode "Binary Tree Vertical Order"
    LeetCode "Sparse Matrix Multiplication"
    LeetCode "Minimum Height Tree" !!
    HackerRank "The Indian Job"
    HackerRank "Poisonous Plants"
    HackerRank "Kundu and Tree" !!
    LeetCode "Best Time to Buy and Sell Stock with Cooldown" !
    HackerRank "AND xor OR"
  • 原文地址:https://www.cnblogs.com/skyblog/p/4120355.html
Copyright © 2011-2022 走看看