【问题标题】:Should my recursive category table contain my products?我的递归类别表应该包含我的产品吗?
【发布时间】:2013-09-09 20:47:20
【问题描述】:

我们有多个类别层次结构,其中类别可以嵌套 N 级深度,并且我们的产品可以属于多个层次结构中的多个类别。我和我的同事在什么是最好的表结构上存在分歧。

他的结构是:

Nodes
---------------------------
NodeId (identity)
ParentNodeId (nullable)
ProductId (nullable)
Description (this is the category or product description)

我的结构是:

Categories
-----------------------------
CategoryId
ParentCategoryId (nullable)
Description

ProductCategories
-----------------
CategoryId
ProductId

两者都会假设也有一个产品表

Products
-------------------
ProductId
ProductDescription
UnitPrice
etc...

所以基本上,他通过在Nodes 表中添加另一条记录来跟踪每个类别中的产品,而我会在ProductCategories 表中创建一条新记录。他说他的方式对性能更好,这是微软推荐的方式。任何人都可以验证这一点吗?是否有任何性能或维护问题可以让我们选择其中一个?有数百个类别和数万种产品。

谢谢。

【问题讨论】:

  • 您的设计清楚地建立了独立于产品的类别层次结构,然后将每个产品分配给所有适用的类别。性能问题通常应在出现时进行处理,或者,如果预测到瓶颈,则应通过对各种设计执行基准测试来处理。应避免过早的优化。

标签: sql sql-server recursion sql-server-2012 hierarchical-data


【解决方案1】:

我个人会出于以下原因选择您的结构:

  1. 更加规范化,更能体现设计意图。新人会更容易理解。
  2. 类别和产品分开保存,不混在一起,更适合未来的扩展。您可以避免添加仅适用于产品或类别的可为空字段。
  3. 他的设计有更多可以为空的字段,这些字段可能(不一定)会影响性能,例如选择属于某个类别的所有产品时。构建类别树也会更容易,因为您无需检查产品。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2010-11-21
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多