ODOO优化层级关系查询效率的方法

《Odoo10 Development Essentials》Chapter5(p106)中介绍了Odoo中分层关系的建立。 代码如下

在上面的代码中。

使用字段来关联上层记录。

使用这个属性来开启分层搜索功能.

使用和字段来进行记录所属层级,当时看书的时候对这些代码不是很理解,只是知道这样做能够提高层级关系数据模型查询数据记录的效率。

简单原理

查询分层结构记录时,一般的想到的方法是从根目录开始,对每个子目录进行递归查询.然后才能得出具体的分层结构。(如递归查询文件夹文件)

Odoo中为了提高层次结构(树状结构)查询效率,每一条层级数据记录添加跟字段. 假设A是B的上级对象。那么存在这样的逻辑关系。

画个图来理解下

可以看到,图中的B属于A的,清楚的表示了A,B的层级从属关系。

Odoo 应用

我们用Odoo11的product模块作为演示 在文件中.看到产品目录(ProductCategory类.15行起)的代码

在Odoo11的演示数据中,产品的目录结构一共有6个

我们查询下数据库中的数据,获取每个产品目录各自的数值

注:这里可以发现,上层目录

添加数值

通过上面的展示,可以清楚的看到所有产品目录各自的包含结构。根目录为All,然后依次为Internal,Saleable. Saleable下面又有3个子目录…

假设要找到All产品目录下的所有产品目录

只需要一条查询语句即可找到所有子目录.无须遍历. 要找Saleable下的所有子目录即可使用 作为条件

结论:

在Odoo的实际使用中,发现使用parent存储特性的模块主要涉及account, product, stock_location. 因为这个优化对查询层级结构效率有良好效果。 凡事皆有两面,这种存储特性会在数据库中添加多余的字段。其实是以空间换时间。

参考

https://stackoverflow.com/questions/11861436/parent-left-and-parent-right-in-openerp

本文来自企鹅号 - Odoo中文媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王硕

原 使用PostgreSQL 9.6 架设mediawiki服务器

1944
来自专栏乐沙弥的世界

安装Oracle 11g RAC R2 之Linux DNS 配置

    Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称。SCAN...

703
来自专栏Ken的杂谈

.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

841
来自专栏破晓之歌

通过xadmin或者suit-v2快速搭建后台管理系统

参考解决方法:https://blog.csdn.net/qingche456/article/details/58279692

1343
来自专栏云计算教程系列

如何在Ubuntu 14.04上设置Masterless Puppet环境

在现代云计算领域,配置管理是至关重要的一步。配置管理工具允许您可靠地将配置部署到服务器。Puppet是这个领域中比较成熟的配置管理工具之一。

110
来自专栏企鹅号快讯

使用技巧精讲

1、快速建立连接 单击顶部活动菜单栏上的“快速建立连接按钮”(Alt+Q),如图1 图1 单击按钮后,弹出图2所示的窗口 ? 图2 Protocol:默认SSH...

1965
来自专栏陈满iOS

开源项目: Mac端12306购票神器 - 12306ForMac:项目运行填坑纪实(mac系统升级后执行brew link carthage命令出错)

但是不用灰心,最大同性交友网站--GitHub上面一个开源了Mac端的项目12306ForMac。如果你对它的安全性不放心,那么我们可以下载下来看看,自己运行看...

772
来自专栏linux运维学习

linux学习第六十七篇:告警系统主脚本,告警系统配置文件,告警系统监控项目

告警系统主脚本 把shell脚本放到/usr/local/sbin/下 创建mon目录来存放告警系统脚本。在/mon目录分别创建bin,conf,log,mai...

33313
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

551
来自专栏运维小白

12.22 php-fpm慢执行日志

php-fpm慢执行日志目录概要 vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容 request_s...

2447

扫码关注云+社区