2009-10-23 87 views
16

我的應用程序 中有多個枚舉,這些枚舉在某些類中用作屬性類型。在數據庫中存儲枚舉值的最佳方式 - 字符串或Int

什麼是最好的方式來存儲這些值在數據庫中,作爲字符串或詮釋?我也將使用流利的Nhibernate來映射這些屬性類型。

示例代碼:

public enum ReportOutputFormat 
{ 
    DOCX, 
    PDF, 
    HTML 
} 

public enum ReportOutputMethod 
{ 
    Save, 
    Email, 
    SaveAndEmail 
} 

public class ReportRequest 
{ 
    public Int32 TemplateId 
    { 
     get { return templateId; } 
     set { templateId = value; } 
    } 
    public ReportOutputFormat OutputFormat 
    { 
     get { return outputFormat; } 
     set { outputFormat = value; } 
    } 

    public ReportOutputMethod OutputMethod 
    { 
     get { return outputMethod; } 
     set { outputMethod = value; } 
    } 
} 

回答

13

兩者都有優勢。如果用整數值來存儲它們,那麼在以後的項目中必須小心編輯枚舉。如果以某種方式重新定義了枚舉元素的整數值,則所有數據都將被損壞。但它會是最快/最小的數據類型。

如果使用字符串表示形式,只要不更改枚舉中元素的名稱,就不會有重新定義的值問題。然而,字符串在數據庫中佔用更多空間,使用起來可能更昂貴一些。

最後,我想沒有確定的贏家。

編輯

使用整數值可能是最好的方式。您可以通過自己設置每個元素的值來克服枚舉元素的「重新定義的值」問題。凱文確實是一個很好的建議。

+2

我不敢相信你甚至會考慮半推薦一種可能很容易導致數據損壞的方法!僅僅是出於對緊湊性的想象關注?如果緊湊性問題很嚴重,請在枚舉中添加一個int字段!永遠不要依賴序號。閱讀有效的Java。 – 2010-03-17 22:33:51

+13

我真的不明白我在哪裏推薦任何說實話的地方。我只說明優點和缺點。雖然你有一點,不想依賴序號的價值,但你可能想把你的評論中的'火'轉換成一個缺口;) – pyrocumulus 2010-03-25 08:51:44

+0

@KevinBourrillion「向int添加int字段」是什麼意思? – John 2017-12-07 22:55:09

16

的實現是很容易在這兩種情況下,和性能上的差異應該很小。

因此,去的含義:字符串比數字更有意義,所以使用字符串。

+5

+1我已經處理了數百萬條記錄。只有這樣我才意識到意義比「緊湊」重要得多。 – Sarmaad 2010-12-13 01:32:07

+0

有時表現更重要,以免意義喪失。所以選擇你的毒藥,並確定哪個更有價值。 – Suncat2000 2017-10-12 20:44:57

相關問題