zoukankan      html  css  js  c++  java
  • 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级联关系,默认为级联,如果要处理级联关系,需要手动明确关系表,处理关系表中的多个外键

  • 相关阅读:
    【转】UTF8文件的Unicode签名BOM(Byte Order Mark)问题
    【转】java使用正则表达式去除字符串的html标签
    用UltraEdit转换大小写
    【转】浅谈字节序(Endianness)
    【转】用UltraEdit的正则表达式替换功能来格式化网页源代码
    【转】关于正则表达式匹配任意字符(包括换行符)的写法
    【转】C# 中的 #region 和 #endregion
    网易游戏开发工程师笔试题
    c++笔试题汇总
    恒生电子面试过程纪录
  • 原文地址:https://www.cnblogs.com/2222bai/p/12104713.html
Copyright © 2011-2022 走看看