dsb*_*dsb 11 database sql-server categories database-performance
我需要对与黄金页面有点类似的东西实现分类和子分类.
假设我有下表:
CategoryId, Title
10, Home
20, Business
30, Hobbies
我有两个选项来编码子分类.
CategoryId, SubCategoryId, Title
10, 100, Gardening
10, 110, Kitchen
10, 120, ...
20, 100, Development
20, 110, Marketing
20, 120, ...
30, 100, Soccer
30, 110, Reading
30, 120, ...
CategoryId, SubCategoryId, Title
10, 100, Gardening
10, 110, Kitchen
10, 120, ...
20, 130, Development
20, 140, Marketing
20, 150, ...
30, 160, Soccer
30, 170, Reading
30, 180, ...
选项2听起来更容易从表中获取行例如: SELECT BizTitle FROM tblBiz WHERE SubCatId = 170
而使用选项1,我必须写这样的东西:
SELECT BizTitle FROM tblBiz WHERE CatId = 30 AND SubCatId = 170
即包含一个额外的 AND
但是,选项1更容易手动维护(当我需要更新和插入新的子类别等时,在我看来它更令人愉悦.
有什么想法吗?选项2在效率方面是否值得麻烦?有没有与这个常见问题相关的设计模式?
sla*_*dan 15
我会用这个结构:
ParentId, CategoryId, Title
null, 1, Home
null, 2, Business
null, 3, Hobbies
1, 4, Gardening
1, 5, Kitchen
1, 6, ...
2, 7, Development
2, 8, Marketing
2, 9, ...
3, 10, Soccer
3, 11, Reading
3, 12, ...
详细地:
IDENTITY或类似),以便您可以拥有10个以上的子类别只要您只使用两个级别的类别,您仍然可以选择如下:
SELECT BizTitle FROM tblBiz WHERE ParentId = 3 AND CategoryId = 11
hierarchyidSQL服务器的新功能看起来很有前途:https://msdn.microsoft.com/en-us/library/bb677173.aspx
我不喜欢嵌套集模型:
parent.
rght是低比lftrght或多个lft字段中显示,则可能会出现不一致| 归档时间: | 
 | 
| 查看次数: | 14212 次 | 
| 最近记录: |