将类似树的菜单存入到数据库应该使用什么样的方式好一点 我个人大概有两种想法 1、在数据表中添加 parentId,这样在查询某一节点下的所有节点时,效率很低 2、使用闭包表,将节点之间的关系全部存入闭包表中,这样的方式对于查询很友好,但是对于插入节点和移动节点就不友好了
所以我不清楚具体使用什么样的方式好一点,有大神给介绍一下吗
1
qinxi 2019-05-10 10:46:36 +08:00
左右值分类
|
2
northernlights 2019-05-10 11:10:52 +08:00
id,pid 全部 load 到内存里,效率应该不会低的。
|
3
Tomorr 2019-05-10 11:26:01 +08:00 2
```
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 |
4
adamwong 2019-05-10 11:49:42 +08:00
|
5
2kCS5c0b0ITXE5k2 2019-05-10 13:05:30 +08:00 via iPhone
如果不是经常访问如管理后台用第一个就够了
|
6
Soar360 2019-05-10 13:09:06 +08:00
闭包表 了解一下
|
8
lihongjie0209 2019-05-10 13:56:57 +08:00
1. 按照树数据结构存储, 存 parentID
1.1 为了优化读取,可以在每个节点上存当前节点的路径如: /a/b/c/ 2. 按照图数据结构存储, 存所有关系 |
10
Tomorr 2019-05-14 09:09:01 +08:00
PID 与 LIKE 的结合,我也不知道叫什么
|