数据库实体间有3种对应关系:一对一,一对多,多对多。

  • 一对一关系: 一个学生对应一个学生档案编号
  • 一对多关系: 一个学生只属于一个班级,但一个班级有多名学生

学生表中添加班级号字段作为外键,与班级表的主键关联

  • 多对多关系: 一个学生可以选择多门课,一门课也有多名学生选择。

在多对多关系中,通过添加字段无法解决问题,需要创建额外的关系表来连接相关数据表
删除数据时,要先删除关系表中的记录,再删除主表中的记录

模型类中处理3种关系

  • 一对一:使用OneToOneField()函数,将字段定义在任意模型类中。
  • 一对多:使用ForeignKey()函数,将字段定义在多的模型类中
  • 多对多:使用ManyToManyField()函数,将字段定义在任意模型类中
  • 可以维护递归的关联关系,使用self指定

一对多关系: 一对一关系可以看作一对多的特例

修改models.py文件中的PersonInfo类,添加hbook属性
ORM会在app_personinfo表中增加hbook_id字段作为外键,并关联到app_bookinfo表的id主键

说明:如果生成迁移文件报错,将migrations目录中除init之外的文件删除

class PersonInfo(models.Model):...hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)

增加测试数据

INSERT INTO app_personinfo(pname, pgender, pcomment, isDelete, hbook_id) VALUES
('曹操',1,'字孟德',0,1),
('刘备',1,'字玄德',0,1),
('诸葛亮',1,'字孔明',0,1),
('孙权',1,'字仲谋',0,1),
('贾宝玉',1,'荣国府公子',0,2),
('林黛玉',0,'金陵十二钗之冠',0,2),
('薛宝钗',0,'薛姨妈之女',0,2),
('王熙凤',0,'贾琏之妻',0,2),
('贾母',0,'宝玉祖母',0,2),
('宋江',1,'呼保义',0,3),
('卢俊义',1,'玉麒麟',0,3),
('吴用',1,'智多星',0,3),
('公孙胜',1,'入云龙',0,3),
('孙悟空',1,'唐僧的大徒弟',0,4),
('唐僧',1,'玄奘',0,4),
('猪八戒',1,'悟能',0,4),
('沙僧',1,'沙悟净',0,4);

多对多关系:

models.py文件中增加新闻类型类新闻类
一个新闻类型下可以用多条新闻,一条新闻可以属于多种新闻类型

新闻类型
class TypeInfo(models.Model):tname = models.CharField(max_length=20)  # 新闻类别新闻
class NewsInfo(models.Model):ntitle = models.CharField(max_length=60)  # 新闻标题ncontent = models.TextField()  # 新闻内容npub_date = models.DateTimeField(auto_now_add=True)  # 新闻发布时间# 通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系typeinfo= models.ManyToManyField('TypeInfo')

执行数据迁移后,自动创建3张表:

  • app_typeinfo:新闻类型表
  • app_newsinfo:新闻表
  • app_newsinfo_typeinfo:关系表

说明:如果要指定关系表的名字,可以使用througt参数

添加测试数据

新闻类型
INSERT INTO app_typeinfo(tname) VALUES
('科技'),
('军事'),
('国际')新闻
INSERT INTO app_newsinfo(ntitle, ncontent, npub_date) VALUES
('互联网科技','马云已退出阿里旗下5家公司:官方称没这个打算','2018-7-24'),
('数码产品','苹果官方科普来了:全面认识Apple ID','2018-6-23'),
('宇宙探索','平行时空、多元宇宙真的存在?令人细思极恐','2018-5-24'),
('国际军情','美国国会议员:前总统吉米·卡特请缨亲赴朝鲜','2017-11-24'),
('中国军情','中国海军万吨巨舰的起点 原型就是这艘民船','2016-5-24'),
('欧洲','欧盟高官警告:特朗普不要搞垮了世贸体系','2017-2-24'),
('美国','伊拉克北部发生汽车炸弹袭击致1死7伤','2016-5-24')关系表
INSERT INTO app_newsinfo_ntype(newsinfo_id, typeinfo_id) VALUES
(1,1),
(3,1),
(5,1),
(4,2),
(6,2),
(2,3),
(4,3),
(6,3),
(7,3)

实例演示: 使用SQL语句,查询所有新闻标题、内容及其类型

SELECT n.ntitle, n.ncontent, t.tname
FROM app_newsinfo n, app_typeinfo t, app_newsinfo_ntype nt
WHERE n.id = nt.newsinfo_id AND t.id = nt.typeinfo_id

第七章、模型详解 -- 模型关系相关推荐

  1. [k8s] 第七章 Service详解

    本章节主要介绍kubernetes的流量负载组件:Service和Ingress. Service介绍 ​ 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但 ...

  2. 第七章 MapReduce详解

    MapReduce是一种并行编程模型,用于大规模数据集(大于1TB)的并行计算,它将复杂的.运行于大规模集群上的并行计算过程高度抽象为两个函数:Map和Reduce. MapReduce是单输入.两阶 ...

  3. vue.js实战 第一篇 第七章 组件详解_组件通信

    正向数据传递props <div id="app"><my-component message="来自父组件的数据"></my-c ...

  4. OSI七层模型详解物理层、数据链路层、网络层、传输层.....应用层协议

    OSI七层模型详解(物理层.数据链路层.网络层.传输层.....应用层协议与硬件) OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型 ...

  5. OSI七层模型详解——物理层

    在阅读本篇文章之前建议您了解信道及工作栈的基本原理,详情可以观看OSI七层模型详解--信道与协议栈 OSI模型概述 OSI全称为"Open System Interconnection&qu ...

  6. 初识网络基础《网络七层模型详解》

    坚持原创输出,点击蓝字关注我吧 图片来自网络 目录 一.初识网络基础 二.网络七层模型详解 1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层 三.总结 一.初识网 ...

  7. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  8. NLP中BERT模型详解

    标题NLP中BERT模型详解 谷歌发表的论文为: Attention Is ALL You Need 论文地址:[添加链接描述](https://arxiv.org/pdf/1706.03762.pd ...

  9. Transformer 模型详解

    Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer.Transformer 模型使用了 Self- ...

最新文章

  1. python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
  2. 深度学习总结:pytorch构建RNN和LSTM,对比原理图加深理解
  3. php任意文件删除漏洞,phpshe后台任意文件删除漏洞及getshell | CN-SEC 中文网
  4. U-Boot如何向内核传递Flash的分区信息
  5. 西雅图治安_数据科学家对西雅图住宿业务的分析
  6. 一个伟大计划终于完成了(粉丝联盟网正式上线了)
  7. C#的变迁史07 - C# 4.0 之线程安全集合篇
  8. python中acosh_acosh()函数以及C ++中的示例
  9. Hibernate之Session merge与update方法
  10. python 图片相似度算法比较_python 比较2张图片的相似度的方法示例
  11. -------------初识----------动态规划。--------------------------------------------
  12. UTF-8与GB2312之间的互换
  13. 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout
  14. NLU新里程碑,微软DeBERTa登顶SuperGLUE排行榜,显著超越人类
  15. javascript 自建立对象
  16. Linux之 linux7防火墙基本使用及详解
  17. 框架学习之Spring 前言
  18. 三分钟了解Activity工作流
  19. 学术会议论文查重吗_投国际会议论文会查重吗
  20. std::binary_serach, std::upper_bound以及std::lower_bound

热门文章

  1. 论文翻译:《6mAPred-MSFF:基于多尺度特征融合机制预测跨物种DNA N6-甲基腺嘌呤位点的深度学习模型》
  2. js解决formatDateTime()1970年问题
  3. 使用Socket实现通信聊天室
  4. java abstract方法_java – 默认实现或抽象方法?
  5. C语言基础14——文件操作。文本文件或二进制文件读写。通讯录的改造。文件缓冲区讲解
  6. 驱动人生深度扫描功能上线!使用感怎么样?
  7. 一个U盘加微信公众号实现互联网Wake On Wan(WOW/WOL)远程电脑开机
  8. 台式计算机蓝屏代码08e,Windows8.1开机蓝屏提示蓝屏代码0x000008e怎么修复?
  9. 二叉树遍历——层序遍历
  10. 基于SOA的移动办公平台解决方案研究