zoukankan      html  css  js  c++  java
  • 断关联多表关系阐述

    断关联多表关系

    '''
    1、外键位置:
        一对多 - 外键放多的一方
        一对一 - 从逻辑正反向考虑,如作者表与作者详情表,作者删除级联删除详情,详情删除作者依旧存在,所以建议外键在详情表中
        多对多 - 外键在关系表中
    2、ORM正向方向连表查找:
        正向:通过外键字段 eg: author_detial_obj.author 
        反向:通过related_name的值 eg:author_obj.detail
        注:依赖代码见下方
    3、连表操作关系:
        1)作者删除,作者详情级联 - on_delete=models.CASCADE  # 被关联表中的数据删除,主关联表中的对应数据也删除
        2)作者删除,作者详情置空 - null=True, on_delete=models.SET_NULL  # 被关联表中的数据删除,主关联表中的对应的字段为空(null)
        3)作者删除,作者详情重置 - default=0, on_delete=models.SET_DEFAULT  # 被关联表中的数据删除,主关联表中的对应数据字段可以通过事先定义好的default=0改为0
        4)作者删除,作者详情不动 - on_delete=models.DO_NOTHING  # 被关联表中的数据删除,主关联表中的数据不做任何处理
        注:拿作者与作者详情表举例
    4、外键关联字段的参数 - 如何实现 断关联、目前表间操作关系、方向查询字段
        - 图书表中:
        # 关联出版社外键字段
        publish = models.ForeignKey(
            to='Publish',
            db_constraint=False,  # book表与publish表在库中段关联,但在逻辑上还是有关系
            related_name='books',  # 反向跨表时按related_name定义的名字即可
            on_delete=models.DO_NOTHING,  # 断级联,当出版社删除时,对应的图书不做任何处理
        )
        # 关联作者外键字段
        authors = models.ManyToManyField(
            to='Author',
            db_constraint=False,
            related_name='books',
        )
        - 作者详情表中
        author = models.OneToOneField(
            to='Author',
            db_constraint=False,
            related_name='detail',
            on_delete=models.CASCADE,  # 级联
        )
    注意: 
        1.ManyToManyField不能设置on_delete,OneToOneField、ForeignKey必须设置on_delete(django1.x系统默认级联,但是django2.x必须手动明确)
        2.OneToOneField 本质是继承了 ForeignKey
    '''
    
  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/jhpy/p/12067791.html
Copyright © 2011-2022 走看看