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

相关文章

来自专栏青枫的专栏

Java语言的发展史

  Java的名字来自于一种咖啡的品种名称,所以Java语言的Logo是一杯热气腾腾的咖啡。

471
来自专栏领域驱动设计DDD实战进阶

DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发。 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求...

3555
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版7.10节set相关的iterator对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

641
来自专栏PPV课数据科学社区

关于python的编解码(decode, encode)

总结总结,本文仅适用于python2.x 默认编码与开头声明 首先是开头的地方声明编码 # coding: utf8 这个东西的用处是声明文件编码为utf8(要...

3397
来自专栏林冠宏的技术文章

php isset( $test ) 的神奇之处。

这次总结下 php 的一个 函数 :  boolean isset($test), 返回值:boolean类型,传入参数不为空,返回true,反之,false ...

17410
来自专栏玄魂工作室

CTF实战30 CTF题目练习和讲解五

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

792
来自专栏平凡文摘

Java 虚拟机:什么是 Java

1104
来自专栏腾讯开源的专栏

【开源公告】业界首创iOS自动内存泄露检测工具MLeaksFinder开源

MLeaksFinder ? MLeaksFinder 是 iOS 平台的自动内存泄漏检测工具,引进 MLeaksFinder 后,就可以在日常的开发,调试业...

3865
来自专栏happyJared

7张思维导图告诉你 - Python标准库知识体系【 正则、日期、数据库、进程线程... 】

622
来自专栏微信公众号:Java团长

Java虚拟机:什么是Java

让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/:

822

扫码关注云+社区