斷關聯多表關係闡述

2022-04-26 06:51:24 字數 1498 閱讀 6747

'''

1、外來鍵位置:

一對多 - 外來鍵放多的一方

一對一 - 從邏輯正反向考慮,如作者表與作者詳情表,作者刪除級聯刪除詳情,詳情刪除作者依舊存在,所以建議外來鍵在詳情表中

多對多 - 外來鍵在關係表中

2、orm正向方向連表查詢:

正向:通過外來鍵字段 eg: author_detial_obj.author

反向:通過related_name的值 eg:author_obj.detail

注:依賴**見下方

3、連表操作關係:

1)作者刪除,作者詳情級聯 - on_delete=models.cascade # 被關聯表中的資料刪除,主關聯表中的對應資料也刪除

2)作者刪除,作者詳情置空 - null=true, on_delete=models.set_null # 被關聯表中的資料刪除,主關聯表中的對應的字段為空(null)

3)作者刪除,作者詳情重置 - default=0, on_delete=models.set_default # 被關聯表中的資料刪除,主關聯表中的對應資料字段可以通過事先定義好的default=0改為0

4)作者刪除,作者詳情不動 - on_delete=models.do_nothing # 被關聯表中的資料刪除,主關聯表中的資料不做任何處理

注:拿作者與作者詳情表舉例

4、外來鍵關聯欄位的引數 - 如何實現 斷關聯、目前表間操作關係、方向查詢字段

- 圖書表中:

# 關聯出版社外來鍵字段

publish = models.foreignkey(

to='publish',

db_constraint=false, # book表與publish表在庫中段關聯,但在邏輯上還是有關係

related_name='books', # 反向跨表時按related_name定義的名字即可

on_delete=models.do_nothing, # 斷級聯,當出版社刪除時,對應的圖書不做任何處理

)# 關聯作者外來鍵字段

authors = models.manytomanyfield(

to='author',

db_constraint=false,

related_name='books',

)- 作者詳情表中

author = models.onetoonefield(

to='author',

db_constraint=false,

related_name='detail',

on_delete=models.cascade, # 級聯

)注意:

1.manytomanyfield不能設定on_delete,onetoonefield、foreignkey必須設定on_delete(django1.x系統缺省級聯,但是django2.x必須手動明確)

2.onetoonefield 本質是繼承了 foreignkey

'''

多表關聯更新

用優惠表裡面的70006569的優惠的開始時間 來更新lik.temp yangmm 1115 discnt 的開始時間。這就出現問題了第乙個問題 同乙個使用者的70006569 優惠的開始時間可能有好幾個 取哪乙個?這就需要rank 函式來解決。第二個問題更新的時候會出現無法將null值插入.這個...

oracle update多表關聯

update a.a3 a.a3 b.b3 的問題 表a 結構 a1 a2 a3 表b 結構 b1,b2,b3 其中 a1 b1 為pk 切值相同 就是可以使用a1 b1 了.請問用sql 語句或過程該如何實現如下的功能?更新a 表的 a3 用a.a3 與b.b3之和更新.3 update a se...

sql 多表關聯

專案中遇到多表關聯查詢,device info與device oper是一對多關係,project info,branch info與device info是一對多關係。多表的查詢 select o.d.devicename,p.projectname,b.branchname r.releasei...