自我总结61

基表

什么是基表

在django的models中,模型类继承的类就是基表。

为抽象表,是专门用来被继承,提供共有字段的,自身不会完成数据库迁移

如何定义基表

class BaseModel(models.Model):
    is_delete = models.BooleanField(default=False)
    created_time = models.DateTimeField(auto_now_add=True)

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

断关联表关系

优点

不会影响连表查询操作效率

会提升链表增删改操作效率

易于后期数据库表的重构

缺点

数据库本身没有连表检测,容易出现脏数据,需要通过严格的逻辑避免脏数据的参数(必要的时候时候管理脏数据)

# 例子

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

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

表关系创建

Django项目中的外键字段的属性

1)related_name在外键中设置外键反向查询的字段名,正向找字段名,反向找relate_name值

2)on_delete

在外键中必须设置,表示联级关系,在1x 系统默认提供 2x手动确认

db_constraint在外键中控制表关联,默认为Ture表示关联,Flase表示断开关联

CASCADE 默认值,级联

假设A表依赖B表,B记录删除,A中对应的数据也跟着删除

DO_DEFAULT 不会被级联

假设A表依赖B表 B记录删除 A表的外键字段不做任何处理

SET_DEFAULT 这个是他们中的最不常用的参数 半级联

假设A表依赖B表 B记录删除 A表的外键字段设置为default属性设置的值,所以配合default属性使用

SET_NULL 半级联

假设A表依赖B表 B记录删除 A表的外键字段为Null ,所以必须配合null=True来使用

3)db_constraint

在外键中控制表关联,默认为True表示关联,设置False表示断开连接

posted @ 2019-12-30 04:30  jzm1201  阅读(71)  评论(0编辑  收藏  举报