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 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

Java中高级面试题(4)

这里选了几道高频面试题以及一些解答。不一定全部正确,有一些是没有固定答案的,如果发现有错误的欢迎纠正,如果有更好的回答,热烈欢迎留言探讨。

1410
来自专栏静默虚空的博客

JAVA 设计模式 代理模式

用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问。 代理模式是一种结构型模式。 结构 ? 图-代理模式结构图 Subject :...

18710
来自专栏hrscy

iOS多线程 - GCD

GCD 全称 Grand Central Dispatch,可翻译为『牛逼的中枢调度器』。GCD 是纯 C 语言,提供了非常强大的函数。

792
来自专栏从流域到海域

《Java程序设计基础》 第2章手记

前言: 本手记以大学Java教学书籍《Java程序设计基础》第四版(清华大学出版社 陈国君等编著)为背景,每周更新一次,内容涉及学习这本书中可能遇到的问题及其解...

1949
来自专栏腾讯大数据的专栏

网卡收包流程

0.前言 为提升信鸽基础服务质量,笔者就网络收包全流程进行了内容整理。 网络编程中我们接触得比较多的是socket api和epoll模型,对于系统内核和网卡驱...

1.4K14
来自专栏kl的专栏

Apollo应用之动态调整线上数据源(DataSource)

博主之前写过使用apollo的配置动态推送能力来动态修改线上环境的日志输出级别,具体可见《spring boot动态调整线上日志级别》,今天来实现一个类似的应用...

4977
来自专栏技术博客

设计模式之七(代理模式)

Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

1153
来自专栏java学习

Hibernate学习笔记1

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hi...

1256
来自专栏张善友的专栏

[腾讯社区开放平台]介绍开放授权协议-OAuth

OAuth (开放授权) 是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所...

2107
来自专栏java达人

众里寻她千百度,蓦然回首,那bug却在灯火阑珊处

今天发现consul上的A服务处于failed状态,幸运的是服务部署了两份,以预防单点故障,做负载均衡,连忙查看http://ip:port/health输出,...

2239

扫码关注云+社区