Django4.0 多數(shù)據(jù)庫-多數(shù)據(jù)庫的局限性

2022-03-16 18:03 更新

跨數(shù)據(jù)庫關(guān)系

Django 當(dāng)前不提供對跨多數(shù)據(jù)庫的外鍵或多對多關(guān)系任何支持。如果已經(jīng)使用路由來分隔模型到不同數(shù)據(jù)庫,那么通過這些模型來定義的任何外鍵和多對多關(guān)系必須在單一數(shù)據(jù)庫內(nèi)。

這是因?yàn)閰⒄胀暾?。為了維護(hù)兩個對象之間的關(guān)系,Djagno 需要知道這個相關(guān)對象的外鍵是否是合法的。如果外鍵被保存在單獨(dú)的數(shù)據(jù)庫上,則無法輕松評價外鍵的合法性。

如果你正在使用 Postgres,Oracle,或支持 InnoDB 的 MySQL,這是在數(shù)據(jù)庫完整性級別上強(qiáng)制執(zhí)行的——數(shù)據(jù)庫級別的鍵約束防止創(chuàng)建無法驗(yàn)證的關(guān)系。

然而,如果你正在使用 SQLite 或支持 MyISAM 表的MySQL,這就不會強(qiáng)制參照完整性;因此,你可以偽造跨數(shù)據(jù)庫的外鍵。盡管 Django 并沒有正式支持這個設(shè)置。

contrib應(yīng)用程序的行為

一些貢獻(xiàn)應(yīng)用包括模型,一些應(yīng)用依賴于其他應(yīng)用。 由于跨數(shù)據(jù)庫關(guān)系是不可能的,因此這會對如何跨數(shù)據(jù)庫拆分這些模型產(chǎn)生一些限制:

  • 在給定合適的路由器的情況下,?contenttypes.ContentType?,?sessions.Session?和?sites.Site?中的每一個都可以存儲在任何數(shù)據(jù)庫中。
  • ?auth?模型 - ?User?,?Group?和?Permission ?- 鏈接在一起并鏈接到?ContentType?,因此它們必須與?ContentType?存儲在同一個數(shù)據(jù)庫中。
  • ?admin?依賴于?auth?,所以它的模型必須和?auth?在同一個數(shù)據(jù)庫中。
  • ?flatpages?和?redirects?依賴于?sites?,所以他們的模型必須和?sites?在同一個數(shù)據(jù)庫中。

注意:如果要將內(nèi)容類型同步到多個數(shù)據(jù)庫,請注意它們的主鍵可能在數(shù)據(jù)庫之間不匹配。這可能導(dǎo)致數(shù)據(jù)損壞或數(shù)據(jù)丟失。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號