首页 > 其他 > 详细

DRF-ORM外键断关联知识点(重点)

时间:2019-12-26 18:51:56      阅读:182      评论:0      收藏:0      [点我收藏+]

一、基表

定义基表的时候,在表类中定义:

class Meta:
    # 基表,为抽象表,是专门用来被继承,提供公有字段的,自身不会完成数据库迁移
    abstract = True

二、表关系

1,一对多:一般外键字段建在多的一方,;

2,多对多:一般外键字段建在查询频率高的一方;

3,一对一:外键字段要根据实际需求建立在合理的位置;

? 作者表与作者详情表一对一,作者详情依赖于作者表,外键字段一般建在作者详情表

三、外键字段属性

? 1.to管理的表,关联表在上方需要加引号,利用反射关联;但是建议你在关联的表的下面建立关联不需要加引号,不需要反射,用途更广泛。

? 2.related_name在外键中设置反向查询的字段名:正向找字段名,反向找related_name值。

? 3.on_delete在外键字段必须设置表示级联关系,在Django1.xx下系统默认提供(值为:models.CASCADE),在Django2.x,必须手动明确CASAADE的值。

? 4.db_constraint在外键中控制表的关联,默认为True设置False表示断开关联。

四、断关联表操作

断关联表关系:

总体理解:将表及表关系建立之后,再利用db_constraint=False将表断关联,然而对一联表增删改查没有任何影响。断表之后关联字段可以用以下4种操作:

on_delete=modles.CASCADE ;

? 1.CASCADE ==>默认值,级联

? 2.DO_NOTHING==>外键不会被级联,假设A表依赖B表,B记录删除,A表的外键字段不做任何处理;

? 3.SET_DEFAULT==>假设A表依赖B表,B记录删除,A表的外键字段置为default属性设置的值,所以必须配合default属性使用;

? 4.SET_NULL==>假设A表依赖B表,B记录删除,A表的外键字段置为null,所以必须配合null=True属性使用;

优点:
1.不会影响联表查询操作效率
2.会提升联表“增“,"删",”改”操作的效率
3.易于后期数据库表的重构
缺点:
数据库本身没有联表操作检测,容易出现脏数据,需要通过严格的逻辑避免脏数据的参数(必要的时候管理脏数据)

? 举个例子:

? A依赖B,先插入A记录,该记录对应的B记录没产生,在没有关联的情况下,该操作可以实现,但是数据就是脏数据;

? 接着再将B数据添加,脏数据就得到处理了。反过来先操作B后操作A,更满足逻辑思维,一样可以执行。通过逻辑将AB表进行# 连表查询,不会有任何异常

DRF-ORM外键断关联知识点(重点)

原文:https://www.cnblogs.com/mqhpy/p/12103781.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!