作用:設計的好,會清晰,且易於理解,後續開發也事半功倍,易於維護。
1.一對一的表,兩表的屬性實際上完全可以合併成乙個表,共用乙個主鍵即可;
2.一對多的表,可以設中間關聯表,也可以將關聯表併入「多」這頭;若設獨立關聯表,則可引入「多」這頭的主鍵作為其主鍵,也可另立主鍵並將「一」和「多」兩表的主鍵作為關聯表的外來鍵;
3.多對多的表,則必須設中間關聯表,關聯表設獨立主鍵,並引入兩個「多」頭的表的主鍵作為關聯表的外來鍵。
4.能用1對1的,就不用1對多;能用1對多的,就不用多對多,往簡單化方向靠;
5.能當屬性處理的,盡量當屬性,而不是當實體處理去另立新表,這樣可使問題簡化。
6.把意義相近聯絡緊密的屬性放在一張表內,而不是拆在多張表中。
三種關係解讀:
foreignkey: 多對一
manytomanyfield:多對多
onetoonefield: 一對一
多對多的關係,例如學生與社團。乙個學生可以進多個社團,乙個社團可以有多個學生。那麼在django怎麼建立這種表關係呢?
django建立多對多關係有兩種方法。
方法一:
1 class student(models.model):2 name= models.charfield(max_length=16)
3 birthday=models.datefield()
4 class club(models.model):
5 name= models.charfield(max_length=16)
6 members = models.manytomanyfield("student")
只需要在任意一方加上類似第6行的manytomanyfield就可以了。django會自動為多對多關聯關係建立一張表,用於兩張表的聯絡。
那麼查詢呢?
1.乙個社團的全部成員(查出來的是物件)c = club.objects.get(id=1)
c.members.all()
2.乙個成員的全部社團(查出來的是物件)
s = student.objects.filter(id=1)
s.club_set.all() # 類名的小寫+_set
方法二:(比較靈活)
自己手動建立一張表關聯聯絡。
class student(models.model):name= models.charfield(max_length=16)
birthday=models.datefield()
class club(models.model):
name= models.charfield(max_length=16)
class membership(models.model):
student = models.foreignkey("student")
club = models.foreignkey("club")
那麼這種方式建表怎麼查詢呢?
乙個學生加入的全部社團:a = student.objects.get(id=1)
b = a.membership_set.all() # 查出來的是物件
for i in b:
print(i.club.name)
乙個社團的全部學生:
a = club.objects.get(id=1)
b = a.membership_set.all() # 查出來的是物件
for i in b:
print(i.student.name)
自關聯模型,就是表中的某一列,關聯了這個表中的另外一列。最典型的自關聯模型就是地區表。省、市、縣都在一張表裡面。省的pid為null,市的pid為省的id,縣的pid為市的id。
示例:
class area(models.model):name = models.charfield(max_length=20, verbose_name='名稱')
# 自關聯(特殊的一對多): 生成的欄位名 parent_id
parent = models.foreignkey('self', verbose_name='上級行政區劃')
class meta:
db_table = 'tb_areas'
verbose_name = '行政區劃'
那麼,怎麼查詢呢?
如果知道乙個市,叫a市,想查他屬於什麼省。
a = area.objects.get(id=1)# b就是a市的省份的物件
b = a.parent
如果知道乙個省,叫a省,想查他有什麼市。
a = area.object.get(id=1)# b就是a省的全部市的物件
b = a.area_set.all() #類名小寫+'_set'b
Django 模型(資料庫)
1.新建專案和應用 django admin.py startproject learn models 新建乙個專案 cd learn models 進入到該項目的資料夾 2.新增應用 django.contrib.admin django.contrib.auth django.contrib.c...
django學習筆記 (七)模型(資料庫)
django模型與資料庫相關,與資料庫相關的 一般寫在models.py中。django支援sqlite3,mysql,postgresql等資料庫,只需要在settings.py中配置即可,不用修改models.py的 將people models.py改為 from django.db impo...
Django模型資料庫配置
在虛擬開發環境中,安裝mysql的資料庫驅動mysqlclient pip install mysqlclient在項 的 settings.py 件中找到databases 配置項,將其資訊修改為 databases 屬性定義語法為 屬性 models.欄位型別 選項 屬性命名規則 autofie...