【发布时间】:2015-10-15 21:30:40
【问题描述】:
我需要在有点类似于金页的东西上实现分类和子分类。
假设我有下表:
分类表
CategoryId, Title
10, Home
20, Business
30, Hobbies
我有两个选项来编码子类别。
选项 1 - 子类别 ID 仅在类别中是唯一的:
子类别表
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, ...
选项 2 - 子类别 ID 总体上是唯一的:
子类别表
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 在效率方面值得麻烦吗?是否有与此常见问题相关的设计模式?
【问题讨论】:
-
我认为您必须使用选项 2 为 categoryid 为 PK 的类别制作一个表,并在 subcategoryid 为 PK 且 categoryid 为 FK 的情况下制作另一个表 SubCategory
标签: sql-server database categories database-performance