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

Sta*_*bie 2 mysql database-design relational-database

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

一个简单的父子表会像这样工作吗:

product_category
- id
- parent_id
- category_name
Run Code Online (Sandbox Code Playgroud)

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

product
- id
- product_category_id
- name
- description
- price
Run Code Online (Sandbox Code Playgroud)

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

Per*_*DBA 5

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

包括一个level_no. 这将有助于代码,但更重要的是,需要排除重复项。

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

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

并请改变

  • ( product_category))idproduct_category_id
  • product idproduct_id
  • parent_idparent_product_category_id

对评论的回应

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

    目录数据模型

    看看你是否能理解它,这就是 Unix inode 的概念。FileNames 在节点内必须是唯一的,因此是第二个索引。这实际上是完整的,但是现在一些开发人员会很不适应编写导航层次结构和级别所需的代码。这些开发人员需要level_no确定他们正在处理的层次结构中的哪个级别。

  2. 建议更改。是的,它被称为良好命名约定。我对它很严格,我发布了它,所以它是一个命名标准。这是有原因的,当您编写一些具有 3 或 4 级连接的 SQL 时,您就会明白;尤其是当你以两种不同的方式去见同一个父母时。如果你搜索SO,你会发现很多问题;总是相同的答案。它也将在我为您编写的下一个模型中突出显示。