2013-04-23 58 views
0

我正在開發一個Ruby on Rails項目。該項目有一個名爲「Post」的主數據庫表。Ruby on Rails中多個資源和一個數據庫表的最佳實踐?

此表格用於存儲作爲不同帖子類型的問題,答案,評論和公告。目前我們只使用一個模型來訪問數據。但是在系統上工作時感覺混亂。因爲每個帖子類型都有一些差異。

什麼是最好的做法:

  1. 拆分後資源爲不同的資源,但僅使用一個表後對數據的訪問?
  2. 將數據庫表分成註釋,問題,答案和公告表;併爲每個表使用資源(模型+控制器+視圖)?
+0

嗯,我不認爲你的問題將被接受,因爲不夠具體。無論如何,我認爲在數據庫中反映你的數據總是更好,特別是如果有(或將會)有很多差異。雖然有不同的方法可以看到它:例如,您可以將公用數據存儲在一個主表中,並將屬性作爲另一個表中的鍵/值對存儲。或者按照您的建議爲每種數據類型設置不同的表格... – 2013-04-23 12:39:44

回答

1

簡答:取決於。

你現在正在做的事情非常接近單表繼承(STI),儘管聽起來像你正在使用一個包含所有不同行爲的單個Post類。 STI是存儲模型數據的有效方法,但像所有情況一樣,它具有優點和缺點。

我的建議是使用單獨的類來封裝單獨域模型的行爲。這是面向對象的基本範例,所以我會說它是或許是的最佳實踐。

假設您將行爲分爲多個類,那麼使用單個表來存儲它們還是使用多個表的問題實際上取決於查詢的複雜程度以及您的模型中存在多少個常見字段。如果他們有很多共同的領域,STI可能會很好地工作。如果沒有,你可能不會享受所有額外讀/寫的開銷。但是,所有這些都是次要的,隨着您的應用程序的增長,您可以瞭解更多關於使用模式的信息。

嘗試使用STI,看看它是怎麼回事。將事物拆分成多個表格比相反,因此遷移路徑不一定非常困難。

+0

謝謝。這是一個很好的建議。我列出了每個帖子類型之間的結構差異,我認爲使用一個表格仍然很有用。根據帖子的類型,只有1或2個空列。我認爲現在可以。 – sn3ek 2013-04-23 13:06:12

+1

對於這種重疊程度,是的,我同意,你可能很好地使用STI。請記住,你仍然可以做足智多謀的路由/控制器,但你的控制器可以從一個普通的控制器繼承。有很多方法可以在這種設置下保持乾燥。長期來看,你最終可能會分手,但很難預測。它可能永遠不需要。 – 2013-04-23 13:13:56

1

我覺得選擇應該基於每一個特定的情況。只是列舉每個選項的優點和缺點。調查和決策的要點可能如下:每種類型實體之間的差異數量,訪問實體的方式,每種類型實體的使用頻率,代碼的可維護性,未來變化的預測以及其他許多方面。