咱們知道,表關係分爲一對多,多對多,一對一
咱們以一個圖書管理系統爲背景,設計了下述四張表,讓咱們來找一找它們之間的關係git
Book與Publish表django
找關係:一對多app
左表(Book)<------------------------------->右表(Publish) # 步驟一: #分析一、先站在左表的角度 左表的多條記錄表明多本書籍,右表的一條記錄表明一個出版社,多本書籍對應同一個出版社 ✔️ #分析二、再站在右表的角度去找 右表的多條記錄表明多個出版社,左表的一條記錄表明一本書,多個出版社不能出版同一本書 ✘ # 步驟二:後肯定關係 # 一對多 左表多對一右表,關聯字段應該建立在BOOk表中,而後foreign key 右表
Book與Author表spa
關係:多對多設計
二者之間是多對多的外鍵關係,須要建立一張單獨的新表來專門存放兩者的關係,外鍵字段推薦建在查詢頻率較高的那種表中3d
Author表與AuthorDetail表code
關係:一對一orm
做者與做者詳情是一對一的外鍵關係,外鍵字段推薦建在查詢頻率較高的那種表中blog
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的後綴
不管本身有沒有加
"""生命週期
方式二:純手動建立(瞭解)
方式三:半自動建立(推薦)