首页 新闻 会员 周边 捐助

无限级 数据库 设计 方案

0
悬赏园豆:10 [已解决问题] 解决于 2018-01-25 10:52

 现在 有一个 无限级 的分类 列表, 有什么好的 解决方案  可以 使 添加 和查询 都好用。 一开始 是 用  id,name, parentId, 这种方式,但是 这种 继承 在查询  子元素列表  和 父元素 列表 时  很麻烦,需要递归 。。   求靠谱的方案

问题补充:

现在 要做的 是一个文件夹的功能,如果需要把 这个 文件夹 分享出去, 需要 把 文件夹 以及 它下面的 子结构 关系  复制 一份 给 新的用户

元点之始的主页 元点之始 | 初学一级 | 园豆:6
提问于:2017-11-29 15:45
< >
分享
最佳答案
0

加一个 code 字段,

1级是 01
2级就是 0101
3级就是 010101

收获园豆:10
长蘑菇星人 | 小虾三级 |园豆:1832 | 2017-11-29 15:51

这样 查不了 某个分类下的 所有 子元素

元点之始 | 园豆:6 (初学一级) | 2017-11-29 16:08

@元点之始: 你都不仔细看回答。

爱编程的大叔 | 园豆:30844 (高人七级) | 2017-11-29 16:19

@元点之始: 或者参考IPv4协议,划分子网的办法。

长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-11-29 16:28

@长蘑菇星人: 现在 要做的 是一个文件夹的功能,如果需要把 这个 文件夹 分享出去, 需要 把 文件夹 以及 它下面的 子结构 关系  复制 一份 给 新的用户

元点之始 | 园豆:6 (初学一级) | 2017-11-29 16:38

@元点之始: 数据就是数据,和你分不分享没关系,用户又不知道你是不是真的拷贝给他一份,或者只是给了一个引用。

长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-11-29 16:42

@长蘑菇星人: 

元点之始 | 园豆:6 (初学一级) | 2017-11-29 16:52
其他回答(4)
0

弄一个叫Code或者Level啥的字段,存储从根开始到当前节点的路径,如:

“12-345-7890”

西漠以西 | 园豆:1675 (小虾三级) | 2017-11-29 16:05

这样 查不了 某个分类下的 所有 子元素

支持(0) 反对(0) 元点之始 | 园豆:6 (初学一级) | 2017-11-29 16:08
1

以上两个的答案,需要查询的时候

Select * from TreeTable where Code like '01%' 这样就是所有01的子树了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2017-11-29 16:21

现在 要做的 是一个文件夹的功能,如果需要把 这个 文件夹 分享出去, 需要 把 文件夹 以及 它下面的 子结构 关系  复制 一份 给 新的用户

支持(0) 反对(0) 元点之始 | 园豆:6 (初学一级) | 2017-11-29 16:38
0

我之前的做法是再做一个表. 父节点id,子节点id. 当主表发生变化时.把所有的的下级都生成一个放到这张表里.

就可以查找某个节点的所有父节点.和某个节点的所有子节点.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-29 16:21
0

最简单的表述方式就是递归;目录在视图中还是需要这种结构。不要东想西想了,这玩意就是ParentId这样最简单进行数据存储描述,最终目录结构如下(转换也最方便):

class Control

{

  public Control Parent{get;}
  public Collection<Control> Children{get;}

}

花飘水流兮 | 园豆:13615 (专家六级) | 2017-11-29 18:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册