orm数据库查询优化和数据库三大设计范式

orm数据库查询优化

only与defer	
select_related与prefetch_related


orm语句的特点:只有用到了查询结果的变量,才走数据库。如果,没用到就不走数据库。

res = models.Book.objects.values('title')

# only与defer

res = models.Book.objects.only('title')
only:拿到的是指定字段的数据,如果需要该数据,不用走数据库,其它字段的数据要走数据

res = models.Book.objects.defer('title')
defer:defer与only刚好相反,对象除了没有title属性之外其他的都有



res = models.Book.objects.all()
    for i in res:
        print(i.publish.name)  # 每循环一次就要走一次数据库查询
        
# select_related与prefetch_related
res = models.Book.objects.select_related('authors')  # INNER JOIN
select_related:
    相当于 inner join 后,再查;括号内只能放外键字段  一对多 一对一 ;多对多不行;这个时候对象无论是book表的数据还是publish的数据都无需再走数据库查询了
    括号内可以放多个外键字段
			select_related(外键字段1__外键字段2__外键字段3__...)

res = models.Book.objects.prefetch_related('publish')  # 子查询

prefetch_related:prefetch_related该方法内部其实就是子查询,将子查询查询出来的所有结果也给你封装到对象中.给你的感觉好像也是一次性搞定的

数据库三大设计范式

数据库三大设计范式:
对数据在数据库中的存储进行规范,减少数据之间的冗余,耦合。
什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

第一范式:1nf,每个字段都不可再分割为多个字段,原子性
第二范式:2nf,满足第一范式,所有 非主键字段,都依赖 主键字段;数据列中出现数据重复,就要把表拆分
第三范式,3nf,满足第二范式,所有 非主键字段,都直接依赖 主键字段,而没有间接依赖

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

参考博客:
https://www.cnblogs.com/knowledgesea/p/3667395.html
https://blog.csdn.net/dosthing/article/details/87954213
    
4.利用ajax完成数据的二次确认删除
上一篇:Java related——Navicat安装教程


下一篇:文献学习(part28)--Biclustering of gene expression data based on related genes and conditions extraction