2013-09-26 55 views
3

我geting到我的應用程序的結尾,並有25個查找表。我的一些域類有15個表引用作爲屬性(一對一)。現在我只記得/瞭解到我可以使用枚舉。我確信我可以將一堆查找表重構爲枚舉類。但是,使用枚舉與查找表的最佳做法是什麼?我的應用場景有幾件事情,可能有助於回答:grails何時使用枚舉與數據庫查找表

  1. 只有一個開發者(我)
  2. 這是一個基於web的應用
  3. 這不會是一個頻繁使用的應用程序
  4. 當呈現包含當前15個查找的域類的視圖時,需要加載所有這些查找以在視圖中顯示數據。 (15個連接)
  5. 查找將被緩存在內存中。
  6. 域類查找關係都是一到一個
  7. 在查找的數據很少會改變
  8. 一些在查找表中的值都羅嗦,例如:「動物的照顧」
  9. 某些查找有許多記錄。例如:一個查詢是美國的州。另一個是一個人的職業。
+0

下面的兩個答案都提供了可靠的建議。我會說實驗將其中的一個或兩個轉化爲基於這種經驗的基礎上,評估其餘的。你會發現使用枚舉在處理字符串和枚舉轉換等方面略有學習曲線,但是知道如何使用它們是很好的。 –

回答

5

我認爲最明顯的答案是使用枚舉的東西,不會改變 - 永遠。就像本週的日子一樣, 或太陽系中的行星 - 好吧,有時候你認爲實際上並不會改變的thnigs實際上已經改變了,但是那樣做 - 一個快速更新,你可以繼續使用幾年。

但是,當您使用的數據肯定會隨着時間的推移而變化,而且通常情況下,這些數據都會存儲在數據庫中。對錶格的更改不需要更改和重新部署代碼。另外,爲這些添加一個管理界面會很好 - 腳手架的屏幕應該足夠快速和簡單。

+1

喜歡這個答案。將ENUMS用於永不改變的事物。我個人認爲,儘量不使用ENUMS,因爲歷史上,這些東西在正常人的一生中並沒有改變。不要將枚舉用於可改變的事物,即使它們只是每年更改一次。您不必重新編譯,重新測試並重新部署代碼以添加或修改值! –

+1

偉大的答案:我的第一個真正的LOL時刻堆棧溢出 – IcedDante

1

這只是我的看法。我不認爲這裏有一個「正確的」答案。

如果存儲在數據庫中,我使用查找表。它更靈活,基於一些事情,應該更高性能。雖然您必須執行連接查詢,但您可以通過啓用二級緩存來減輕這種影響。 cache: true在你的映射中。

使用Enum而不是查找時需要記住的一件事情是,不再有一個外鍵用於單獨的表,因此不能保證這些值位於數據庫級別所需的列表中。另外,如果您需要基於Enum進行查詢,那麼現在是字符串比較而不是數字比較。