• Day 73 基表/断关联表关系/级联属性


    基表

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

    断关联表关系

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

    表关系

    1. Book和Publish一对多: 外键在多的一方 Book
    2. Book和Author多对多: 外键在查询频率高的一方 Book
    3. Author和AuthorDetail一对一: 外键要根据实际需求建立在合理的位置 AuthorDetail
    class Book(BaseModel):
        name = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=10, decimal_places=2)
        publish = models.Foreign(to='Publish', related_name='books', db_constraint=False, on_delete='DO_NOTHING', null=True)
        authors = models.ManyToMany(to='Author', related_name='books', db_constraint=False)
    
    class Publish(BaseModel):
        name = models.CharField(max_length=32)
        address = models.CharField(max_length=64)
        
    class Author(BaseModel):
        name = models.CharField(max_length=32)
    
    class AuthorDetail(BaseModel):
        mobile = models.CharField(max_length=32)
        author = models.OneToOneField.CharField(to=Author, related_name='detail', db_constraint=False, on_delete=models.CASCADE)
    

    外键字段属性

    related_name

    在外键中设置外键反向查询的字段名:反向找related_name

    db_constraint

    默认为True表示关联,设置False表示断开关联

    on_delete

    在外键中必须设置,表示级联关系,在Django1.x下,系统默认提供(值为models.CASCADE), Django2.x下,必须手动明确

    级联关系

    • CASCADE 默认值,级联
    • DO_NOTHING 外键不会被级联,假设A表依赖B表,B记录删除,A表的外键字段不做任何处理
    • SET_DEFAULT 假设A表依赖B表,B记录删除,A表的外键字段设置为default属性设置的值,所有必须配合default属性使用
    • SET_NULL 假设A表依赖B表,B记录删除,A表的外键字段设置为null,所有必须配合null=True属性使用

    注意: 多对多字段不能设置on_delete级联关系,默认为级联,如果要处理级联关系,需要手动明确关系表,处理关系表中的多个外键

  • 相关阅读:
    Postman+Newman生成接口测试报告
    Spring Boot系列 – 2. Spring Boot提供的特性
    Spring Boot系列 – 5. 不同的环境使用不同的配置
    Spring Boot系列 – 4. 读取配置文件(application.yml)中的属性值
    MySQL高可用之MHA安装
    恢复误删除表黑科技之relay log大法(续)
    恢复误删除表黑科技之relay log大法
    关于mysqldump备份非事务表的注意事项
    利用binlog server及Xtrabackup备份集来恢复误删表(drop)
    基于Xtrabackup备份集来恢复某个误删除的表(drop)
  • 原文地址:https://www.cnblogs.com/2222bai/p/12104713.html
Copyright © 2020-2023  润新知