将类别作为搜索结果从属性表中存储

时间:2014-12-19 22:00:38

标签: database design-patterns database-design e-commerce

创建不在类别表中的商店类别,而是从属性表中搜索结果是正常的吗?

您可能遇到的陷阱是什么?我之前从未这样做过,但是现在当我在网站上使用具有许多不同属性的产品时,我发现创建了许多不太实用的类别(或者我错了),我试图在网上搜索但是没有找到关于这个db设计的信息(或者我没有正确搜索(?),也许这种方法有一些名称,比如编程模式?)。

例如:

    Products: Levis[bottoms, jeans, blue], Dockers[bottoms, pants, black], Lee[bottoms, pants, violet]
    Categories:
      Bottoms [query:bottoms]
        Pants [query:pants]
          Violet Pants [query:pants, violet]
        Jeans [query:jeans]

    Products: Abibas[shoes, sport...], SuperBoots[shoes, boots, leather]
    Categories:
      "Shoes"[query:shoes]
        "Leather boots"[query: boots, leather]
        "Sport" [query: sport] 

2 个答案:

答案 0 :(得分:0)

从高度标准化的设计开始,以避免异常并保持干燥。仅在需要时进行优化。使用真实世界数据测试性能。

如果您要使用分层或网络类别,则应使用支持分层(“递归CTE”)查询的数据库(即不是MySQL)。

使用standard data modeling patterns来节省时间。

对于纯层次结构类别,请使用如下表格:

create table product_categories (
  category_id int primary key,
  name text not null,
  parent_id int null references categories(category_id),

  unique (name, parent_id)
);

并从product表到上表中有一个外键。

答案 1 :(得分:0)

另一种看待这种情况的方式 - 并不总是需要创建单独的类别 - 有时会过滤类别以使客户更容易找到他们想要的内容。因此,在您的示例中,客户说只向我展示那些由皮革制成的靴子,或者只用Violet颜色给我看裤子。

平衡您的市场 - 如果人们来到您的网站购买皮靴,那么将其作为自己的类别是有道理的。这是一个非常具体的目的地类别,也可能有很多子类别。

与紫罗兰色的裤子 - 也许这是某个目的地类别:-) 但最有可能的是它将是一个应用于类别的搜索过滤器。

对类别的另一个考虑是它们对于SEO非常重要,因此您希望保持核心类别结构一致,以便您可以得到适当的排名。