ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[Django---ORM----> 表模型之on_delete参数、数据库关系分析、ORM操作关系 (外键位置及参数)]

2022-06-09 14:33:26  阅读:133  来源: 互联网

标签:关系 外键 关联 ---- ORM 参数 操作 delete


[表模型之on_delete参数,数据库关系分析,ORM操作关系(外键位置及参数)]

表模型之on_delete参数

'''
表关系 on_delete 值
* 代表使用频率
作者没,作者详情一定没:CASCADE   (*****)
作者没,书还是该作者的:DO_NOTHING (管理的主键id不会有任何变化)
部门没。部门内的员工全部进入未分组部门: SET_DEFAULT(需要配合default属性使用)  
部门没。部门内的员工部门外键字段设置为空, SET_NULL(需要配合NULL=True属性使用)  (*****)

'''

数据库关系分析

"""
1)之间有关系的两个表,增删改操作会相互影响(效率低),查询操作就是正常的连表操作
2)之间有关系的两个表,断开关联,但所有数据保持与原来一致
 每个表都可以单独操作,增删改操作效率极高,但是容易出现脏数据(开发中完全可以避免)
 由于数据没有任何变化,所以查询的连表操作不会受到任何影响
 
3)Django的ORM支持断关联操作关系表,且所有的操作方式和没有断关联操作一致
"""

ORM操作关系

"""
外键位置:
1)一对多:ForeignKey必须放在多的一方,书与出版社,外键应该放在书表
2)多对多:ManyToManyField放在任何一方都可以,因为会创建关系表,在关系表中用两个外键分别关联两个表
3)一对一:OneToOneField放在依赖的表,作者与作者详情,放在详情表,OneToOneField会被转换为 外键 + 唯一约束
"""

"""
ORM关系Field:
ForeignKey可以设置related_name, db_constraint, on_delete
OneToOneField可以设置related_name, db_constraint, on_delete
ManyToManyField只能设置related_name, db_constraint
    不能设置on_delete的原因:不管是关联的A表,还是B表,数据修改,都会影响到关系表(默认级联),
    如果想控制,只能自定义关系表,在关系表的两个外键分别设置on_delete
"""

"""
参数含义
related_name:表之间反向访问的名字,默认是 表名小写|表名小写_set
db_constraint:表之间的关联关系,默认为True,代表关联,设置False,可以提高增删改的效率,且不影响查等其他操作
on_delete:在django 1.x下默认是CASCADE,在django 2.x下必须手动明确
"""




标签:关系,外键,关联,----,ORM,参数,操作,delete
来源: https://www.cnblogs.com/liupengfei1123/p/16359230.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有