2009-11-29 66 views
1

想聽聽您的意見。在目前的階段(1.1),你會在django中使用泛型關係還是堅持更傳統的建模 - 考慮到它很難輕鬆地遍歷和過濾這些關係(與ForeignKey,ManyToMany,OneToOne關係相比)?Django中的泛型關係

這裏有一個例子 - 當每個用戶最後一次看到每個頁面時,他/她決定「關注」一篇文章時,他們希望接收電子郵件更新的頻率以及他們何時請求最後一次,這種電子郵件最後發送給用戶和頁面修訂日誌。

因此構建一個有意義的電子郵件摘要我必須構造挺重的查詢,以便用戶不會獲得更多的電子郵件比他們要求和消息是最翔實和簡短。

一種方法 - 定義Activity模型,可以適應任何場景,並使用通用關係將它們連接到其他模型,另一種方式 - 定義單獨的模型PageView,EmailUpdateLog,EmailSubscription並以「常用方式」訪問它們。

使用通用關係的缺點 - 它很難編寫複雜的查詢,他們會運行速度較慢,上升空間 - 在模型更少的代碼和廣義對象更容易獲得(例如活動)。

您是否發現了一種通用關係爲您帶來巨大優勢的場景,除了只是一個有趣的概念?

也許你發現了一些其他的方式來模擬泛型關係?

謝謝。

回答

-1

一切都取決於你的需求/任務..

對於某些任務一般關係都很好(我使用它們) 對於其他更好的利用「傳統模擬」

+3

「對於某些情況,這很好,對於某些情況它不好。」謝謝你沒有說什麼。 – 2009-11-29 10:31:24

2

我會質疑你的起始假設:

因爲它尚未不可能遍歷和反對這種關係很容易過濾

我認爲遍歷和過濾泛型關係並不是特別困難。只要定義關係的兩端,前向和後向遍歷的工作方式與正常ForeignKeys的工作方式大致相同。

完全有可能使這些查詢與普通關係一樣高效,所以我沒有看到太多問題。

+0

你不需要每個泛型關係額外的兩個連接嗎?所以它們不能高效 - 至少在數據庫級別。 – Evgeny 2009-11-29 20:09:30

+0

也許你應該在做出這個假設之前實現它並分析你的代碼。 – Soviut 2009-12-03 06:30:32