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

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/2222bai/p/12104713.html
Copyright © 2011-2022 走看看