2013-12-16 42 views
2

有4個模型的models.py。 其標準的記錄是:嵌套鏈vs重複信息

class Main(models.Model): 
    stuff   = models.IntegerField() 
class Second(models.Model): 
    nested   = models.ForeignKey(Main) 
    stuff   = models.IntegerField() 
class Third(models.Model): 
    nested   = models.ForeignKey(Second) 
    stuff   = models.IntegerField() 
class Last(models.Model): 
    nested   = models.ForeignKey(Third) 
    stuff   = models.IntegerField() 

並沒有最後模型的另一個變體:

class Last(models.Model): 
    nested1   = models.ForeignKey(Main) 
    nested2   = models.ForeignKey(Second) 
    nested   = models.ForeignKey(Third) 
    stuff   = models.IntegerField() 

將這種方式節省一些數據庫負載?

nested1和nested2中的信息會重複Secod和Third中的字段,甚至可能會過時(幸運的是,在我的情況下,由於數據不會被更改,只會添加新的字段)。 但是,從我的想法,它可能會節省數據庫負載,當我查找某個主要記錄的所有最後記錄。或者當我只爲特定的最後一項查找Main.id時。

我對不對?

它會真的保存負載還是有更好的做法?

+0

你的模型的目的是什麼?有時直接連接兩個模型實際上只通過其他模型連接是不切實際的。我知道你的問題是關於數據庫負載的,但是通常有一個選項在邏輯上更有意義 –

回答

1

這一切都取決於您如何訪問數據。默認情況下,當你訪問外鍵時,Django會再次調用數據庫。因此,如果您希望減少對數據庫的調用,則可以使用select_related來預取外鍵中的模型。