我有这个层次来对汽车进行分类:
Color
/ \
Light Dark
/ | \ / | \
Red Green Blue Red Green Blue
| | | | | |
Car1 Car2 Car3 Car4 Car5 Car6
但我也可以拥有这种等级制度:
Color
/ | \
Red Green Blue
/ \ / \ / \
Light Dark Light Dark Light Dark
| | | | | |
Car1 Car4 Car2 Car5 Car3 Car6
如何在表格中创建这些内容?
我的想法是这样的:
Id | ParentId | ParentId2 | Name
--------------------------------
1 Null Null Color
2 1 Light
3 1 Dark
但是如果我想添加更多层次结构,添加许多ParentId列似乎不太好。 我想我也会遇到多个父母的问题。
目标是将这些层次结构放在树视图控件中,用户就能够 只需单击按钮即可调用他想要查看的任何层次结构。
谢谢!
答案 0 :(得分:2)
就个人存储在sql中的层次结构而言,我个人更喜欢nested sets。根据您的约束,该技术有很多变化,网上有很多关于CRUD sql例程的资源。
我必须说,当你有大树时,你会在创建/更新/删除顶级父母时有一个小的性能损失,但是当你阅读时你有很好的表现,我认为这比你有一个递归模型更受欢迎另一种方式。
修改强>
我看到了多个父问题。我建议通过合并第二和第三级来改变你的方法。你会有像
这样的东西**Node** | **Left** | **Right** | **Level**
Color 1 26 1
LightRed 2 5 2
LightGreen 6 9 2
LightBlue 10 13 2
DarkRed 14 17 2
DarkGreen 18 21 2
DarkBlue 22 25 2
Car1 3 4 3
Car2 7 8 3
Car3 11 12 3
Car4 15 16 3
Car5 19 20 3
Car6 23 24 3
获取所有具有颜色的汽车的查询将类似于
select *
from hierarchy
where left > 1 and right < 26 and level = 3
编辑2:
a-horse-with-no-name正确指出您的DBMS可能支持递归模型。如果是这样,那么它可能是一个更好的解决方案。 Here是Sql Server的一些文档。
答案 1 :(得分:1)
它应该被视为不同的层次结构类型......
Id | ParentId | Type | Name
--------------------------------
1 Null 1 Color
2 1 1 Light
3 1 1 Dark
4 Null 2 Color
5 4 2 Red
6 4 2 Green
7 4 2 Blue
8 5 2 Light
...
或者只是标准化为3个表:汽车,颜色,色调
因此,您可以查询原始数据,然后在代码中生成树结构循环。