假设我有许多产品(从几千到几十万)需要以分层方式分类。 我如何在数据库中建模这样的解决方案?
像这样的简单父子表是否有效:
product_category
- id
- parent_id
- category_name
然后在我的产品表中,我会这样做:
product
- id
- product_category_id
- name
- description
- price
我担心的是这不会扩展。顺便说一下,我现在正在使用MySQL。
答案 0 :(得分:4)
当然它会扩展。这将工作得很好,这是一个常用的结构。
加入level_no
。这将有助于代码,但更重要的是,它需要排除重复。
如果你想要一个非常紧凑的结构,你需要类似Unix的inode概念。
您可能难以了解生成层次结构所需的代码,例如来自product
,但这是一个单独的问题。
请改变
product_category
))id
至product_category_id
product
id
至product_id
parent_id
至parent_product_category_id
回复评论
level_no
。看一下这个数据模型,它是一个目录树结构(例如FlieManager Explorer窗口):
看看你是否能理解它,那就是Unix inode概念。 FileNames必须在Node内是唯一的,因此是第二个索引。这实际上已经完成了,但是现在有些开发人员会非常适合编写导航层次结构所需的代码。这些开发人员需要level_no
来确定他们正在处理的层次结构中的级别。
推荐的更改。是的,它被称为良好命名约定。我很苛刻,我发布它,所以这是一个命名标准。有一些原因,当你编写一些带有3或4级连接的SQL时,你会清楚这一点;特别是当你以两种不同的方式去同一个父母时。如果你搜索SO,你会发现许多问题;总是一样的答案。在我为你写的下一个模型中它也会很亮。
答案 1 :(得分:0)
您的解决方案使用层次结构的邻接列表模型。它是迄今为止最常见的。它可以扩展到数千种产品。问题是它需要递归查询或SQL的产品特定扩展来处理无限深层次结构。
还有其他模式的层次结构。特别是,嵌套集模型。嵌套集模型适用于检索单个查询中任何节点的路径。它也适用于检索任何所需的子树。让它保持最新是更多的工作。还有很多工作要做。
你可能想要在咬掉比想要咀嚼更多的东西之前先简单地探索一下。
您打算如何处理层次结构?