我们知道,表关系分为一对多,多对多,一对一
我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系
Book与Publish表
找关系:一对多
左表(Book)<------------------------------->右表(Publish) # 步骤一: #分析1、先站在左表的角度 左表的多条记录代表多本书籍,右表的一条记录代表一个出版社,多本书籍对应同一个出版社 ✔️ #分析2、再站在右表的角度去找 右表的多条记录代表多个出版社,左表的一条记录代表一本书,多个出版社不能出版同一本书 ✘ # 步骤二:后确定关系 # 一对多 左表多对一右表,关联字段应该创建在BOOk表中,然后foreign key 右表
Book与Author表
关系:多对多
两者之间是多对多的外键关系,需要创建一张单独的新表来专门存放二者的关系,外键字段推荐建在查询频率较高的那种表中
Author表与AuthorDetail表
关系:一对一
作者与作者详情是一对一的外键关系,外键字段推荐建在查询频率较高的那种表中

class Book(models.Model):
# 因为id是自动创建,所以可以不写
title =models.CharField(max_length=64)
#price为小数字段,总共8位数,小数位占2位
price = models.DecimalField(max_digits=8,decimal_places=2)
# 书籍与出版社 是一对多外键关系
publish = models.ForeignKey(to='Publish') # 默认关联字段就是出版社表的主键字段
# publish = models.ForeignKey(to=Publish)
# to后面也可以直接写表的变量名 但是需要保证该变量名在当前位置的上方出现
# 书籍与作者 是多对多外键关系
authors = models.ManyToManyField(to='Author')
"""
authors字段是一个虚拟字段 不会真正的在表中创建出来
只是用来告诉django orm 需要创建书籍和作者的第三张关系表
"""
class Publish(models.Model):
name = models.CharField(max_length=64)
addr = models.CharField(max_length=64)
class Author(models.Model):
name =models.CharField(max_length=32)
phone = models.BigIntegerField()
# 一对一外键关系建立
author_detail = models.OneToOneField(to='AuthorDetail')
class AuthorDetail(models.Model):
age = models.IntegerField()
addr = models.CharField(max_length=255)
注意:"""
ForeignKey字段以及OneToOneField字段 在创建表的时候orm都会自动给该字段加_id的后缀
无论自己有没有加
"""


多对多关联关系的三种方式
方式一:全自动创建第三张表

方式二:纯手动创建(了解)

方式三:半自动创建(推荐)

django请求生命周期流程图

阅读《基于区块链技术的溯源系统 》总结(硕士论文)
阅读《轻量级比特币交易溯源机制》总结
论文复现实践
20199316 2019-2020-2 《网络攻防实践》第12周作业
20199316 2019-2020-2 《网络攻防实践》第十一周作业
网络空间安全学习笔记
20199316 2019-2020-2 《网络攻防实践》第10周作业
20199316 2019-2020-2 《网络攻防实践》第9周作业
20199316 2019-2020-2 《网络攻防实践》第8周作业
- 最新文章
-
20199317 2019-2020-2 《网络攻防实践》第6周作业
20199317 2019-2020-2 《网络攻防实践》第5周作业
20199317 2019-2020-2 《网络攻防实践》第4周作业
20199327 2019-2020-2 《网络攻防实践》综合实践
20199327 2019-2020-2 《网络攻防实践》第十二周作业
20199327 2019-2020-2《网络攻防实践》第十一周作业
20199327 2019-2020-2 《网络攻防实践》第十周作业
20199327 2019-2020-2《网络攻防实践》第九周作业
20199327 2019-2020-2 《网络攻防实践》第八周作业
20199327 2019-2020-2 《网络攻防实践》第七周作业
- 热门文章
-
20199327 2019-2020-2 《网络攻防实践》第六周作业
20199327 2019-2020-2 《网络攻防实践》-第五次作业
实践 ——Fiddler使用
以太坊搭建联盟链:两个节点完成一次转账交易
Ubuntu18.04配置过程
Ubuntu16.04/Ubuntu18配置以太坊开发环境Q&A
论文泛读一
阅读《TBAC:Transaction-Based Access Control on Blockchain for Resource Sharing with Cryptogra- phically Decentralized Authorization》总结
阅读《A Blockchain-based Approach for Data Accountability and Provenance Tracking》总结
阅读《基于联盟链的物联网动态数据溯源机制 》总结
Copyright © 2011-2022 走看看
