多级联动菜单怎么存在数据库好一点

2019-05-10 10:23:47 +08:00
 jwh199588

将类似树的菜单存入到数据库应该使用什么样的方式好一点 我个人大概有两种想法 1、在数据表中添加 parentId,这样在查询某一节点下的所有节点时,效率很低 2、使用闭包表,将节点之间的关系全部存入闭包表中,这样的方式对于查询很友好,但是对于插入节点和移动节点就不友好了

所以我不清楚具体使用什么样的方式好一点,有大神给介绍一下吗

693 次点击
所在节点    程序员
10 条回复
qinxi
2019-05-10 10:46:36 +08:00
左右值分类
northernlights
2019-05-10 11:10:52 +08:00
id,pid 全部 load 到内存里,效率应该不会低的。
Tomorr
2019-05-10 11:26:01 +08:00
```
ID | PID | LIKE
--- | ---- | ---
1 | 0 | 1.
2 | 0 | 2.
3 | 1 | 1.3.
4 | 2 | 2.4.
5 | 3 | 1.3.5.
6 | 4 | 2.4.6.
7 | 5 | 1.3.5.7
```

移动节点更新`LIKE`,有一个算法

如 PID=4 改成 1,LIKE 的值 是 `1. 加上 ( 2.4.6. 减去 2.4. 等于 6.) 等于 1.6.`

- `1.` 是根据 ID=1 得到,1 对应新的 PID
- `2.4.6.` 是当前 ID 的 LIKE 值
- `2.4.` 是 ID=4 得到,4 对应当前的 PID
adamwong
2019-05-10 11:49:42 +08:00
2kCS5c0b0ITXE5k2
2019-05-10 13:05:30 +08:00
如果不是经常访问如管理后台用第一个就够了
Soar360
2019-05-10 13:09:06 +08:00
闭包表 了解一下
wozhizui
2019-05-10 13:26:27 +08:00
@Tomorr 受益了
lihongjie0209
2019-05-10 13:56:57 +08:00
1. 按照树数据结构存储, 存 parentID
1.1 为了优化读取,可以在每个节点上存当前节点的路径如: /a/b/c/
2. 按照图数据结构存储, 存所有关系
jwh199588
2019-05-14 08:59:23 +08:00
@Tomorr 这种方式叫什么名称
Tomorr
2019-05-14 09:09:01 +08:00
PID 与 LIKE 的结合,我也不知道叫什么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/562767

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX