无限级分类数据表设计

  • 无限级分类的数据表设计用哪种方式设计更合适点呢?
    1. 一级一个表(如果已经确定了分类级别不是很多,如5级,用这种方式合适吗)
    2. 只用一个表,在表中设置一个parent_id来找到自己的上一级(但是感觉这种方式也不是很适合层级多的,感觉三级以上的话就会很麻烦)
  • 所以到底怎么设计才合适呢?
  • 求指教下
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 17
Marrigan

可以用将所有上级信息存储到一个字段,以这样的形式存储

file

具体可以参考这个 L06 Laravel 教程 - 电商进阶 ( Laravel 6.x ) - 商品类目设计

3年前 评论

其实只要转换个思路就行。用parent_id没问题。但不要反复执行多个sql,而是一次性读取出来,内存循环组装。思路是这样,你慢慢探索吧。

3年前 评论

@star7th 嗯嗯,行,我再琢磨琢磨啊 :joy:

3年前 评论

使用一张表 parent_id 来处理吧!内存组装函数可参考 博客:分享一个无限极分类的函数

3年前 评论

@wuyan 嗯嗯,好的,我研究研究啊

3年前 评论

可以看看这个包 betterde/tree 无限极数据放一个表,然后全部查出来再用这个包生成:

$categories = Category::query()->get();
$generator = new Generator();
$tree = $generator->make($categories, 'code', 'parent_code', 'children', '');
3年前 评论
qingshui (楼主) 3年前
callback 3年前
GeorgeKing (作者) 3年前
callback 3年前
GeorgeKing (作者) 3年前
Reason_bobo 3年前
GeorgeKing (作者) 3年前
Reason_bobo 3年前

左右值?

3年前 评论
qingshui (楼主) 3年前

file 无限级一般表结构我就用这种,当数据量上去的话,再考虑根据不同场景把数据放置内存里面。

3年前 评论
qingshui (楼主) 3年前
/**
 * 一维数据数组生成数据树
 * @param array $list 数据列表
 * @param string $id 父ID Key
 * @param string $pid ID Key
 * @param string $son 定义子数据Key
 * @return array
 */
public static function arr2tree($list, $id = 'id', $pid = 'pid', $son = 'sub')
{
    list($tree, $map) = [[], []];
    foreach ($list as $item) $map[$item[$id]] = $item;
    foreach ($list as $item) if (isset($item[$pid]) && isset($map[$item[$pid]])) {
        $map[$item[$pid]][$son][] = &$map[$item[$id]];
    } else $tree[] = &$map[$item[$id]];
    unset($map);
    return $tre
3年前 评论
qingshui (楼主) 3年前

这种分类不就是一对多的关系吗? 模型中加一个hasMany的关联方法不就行啦

3年前 评论
qingshui (楼主) 3年前

博客:树状数据结构存储方式——查询篇

可以看看这种存储结构呀,读取的花销会小很多,相应存储的花销会大很多。

3年前 评论
qingshui (楼主) 3年前

左右值无限分类就挺好

3年前 评论
qingshui (楼主) 3年前

我之前的使用Laravel-nestedset的方式弃用了,不是nestedset 不好,而是开发到后面需要开API。

既然要开api,tree为什么要放在服务器上去计算?

现在的方案是 id name pid的 形式存储的! tree的话 直接开个api 都不用排序,前端就能很好的处理成tree。 例子:whvse.gitee.io/treetable-lay/demo/

3年前 评论
qingshui (楼主) 3年前
jenkincei

github.com/jiaxincui/closure-table laravel树形结构管理解决方案,最少的数据库查询。

3年前 评论
qingshui (楼主) 3年前

刚做完无限极分类,可以参考一下 博客:Laravel 框架实现无限极分类

3年前 评论
qingshui (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!