数据库建模:如何对亚马逊等产品进行分类?

时间:2010-11-27 10:58:57

标签: mysql relational-database database-design

假设我有许多产品(从几千到几十万)需要以分层方式分类。 我如何在数据库中建模这样的解决方案?

像这样的简单父子表是否有效:

product_category
- id
- parent_id
- category_name

然后在我的产品表中,我会这样做:

product
- id
- product_category_id
- name
- description
- price

我担心的是这不会扩展。顺便说一下,我现在正在使用MySQL。

2 个答案:

答案 0 :(得分:4)

当然它会扩展。这将工作得很好,这是一个常用的结构。

加入level_no。这将有助于代码,但更重要的是,它需要排除重复。

如果你想要一个非常紧凑的结构,你需要类似Unix的inode概念。

您可能难以了解生成层次结构所需的代码,例如来自product,但这是一个单独的问题。

请改变

  • product_category))idproduct_category_id
  • product idproduct_id
  • parent_idparent_product_category_id

回复评论

  1. level_no。看一下这个数据模型,它是一个目录树结构(例如FlieManager Explorer窗口):

    Directory Data Model

    看看你是否能理解它,那就是Unix inode概念。 FileNames必须在Node内是唯一的,因此是第二个索引。这实际上已经完成了,但是现在有些开发人员会非常适合编写导航层次结构所需的代码。这些开发人员需要level_no来确定他们正在处理的层次结构中的级别。

  2. 推荐的更改。是的,它被称为良好命名约定。我很苛刻,我发布它,所以这是一个命名标准。有一些原因,当你编写一些带有3或4级连接的SQL时,你会清楚这一点;特别是当你以两种不同的方式去同一个父母时。如果你搜索SO,你会发现许多问题;总是一样的答案。在我为你写的下一个模型中它也会很亮。

答案 1 :(得分:0)

您的解决方案使用层次结构的邻接列表模型。它是迄今为止最常见的。它可以扩展到数千种产品。问题是它需要递归查询或SQL的产品特定扩展来处理无限深层次结构。

还有其他模式的层次结构。特别是,嵌套集模型。嵌套集模型适用于检索单个查询中任何节点的路径。它也适用于检索任何所需的子树。让它保持最新是更多的工作。还有很多工作要做。

你可能想要在咬掉比想要咀嚼更多的东西之前先简单地探索一下。

您打算如何处理层次结构?