我的递归类别表是否应包含我的产品?

时间:2013-09-05 21:18:14

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

我们有多个类别层次结构,其中类别可以是嵌套的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表中创建一条新记录。他说他的表现方式更好,而且这是微软推荐的方式。任何人都可以验证吗?是否有任何性能或维护问题可以让我们选择一个而不是另一个?有数百种类别和数以万计的产品。

感谢。

1 个答案:

答案 0 :(得分:0)

我个人会选择你的结构,原因如下:

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