2008-10-31 59 views
12

在我的數據庫我具有限定類型例如我應該使用枚舉還是查詢數據庫中的表?

表表:出版物類型

 

ID | Type 
---------- 
1 | Article 
2 | Abstract 
3 | Book 
.... 

其通過的ID密鑰,其具有場TYPEID出版物的表有關。

然後,我創建了一個我想要根據發佈類型進行過濾的.NET應用程序的PublicationTable數據表。例如,以下函數爲我提供了特定作者和出版物類型的出版物數量。

 

    Public Function countPublications(ByVal authorID As Integer, _ 
             ByVal publicationType As Integer) As Integer 

     Dim authPubs As New PublicationsDataSet.tblPublicationsDataTable 
     authPubs = Me.getAuthorsPublications(authorID) 

     Dim dv As New DataView(authPubs) 
     dv.RowFilter = "status='published' AND type='" + _ 
         publicationType.ToString + "'" 

     Return dv.Count 

    End Function 

調用該函數由特定類型的作者獲得文章的數量,我可以

  1. 電話與兩個整數

    功能

    countPublications(的AuthorID,1)

  2. 設置一個枚舉,這樣我可以寫

    個countPublications(的AuthorID,pubType.Article)

  3. 以某種方式使用該出版物類型表過濾發佈的數據集,但我沒有得到我的周圍如何做到這一點的頭。

我應該考慮哪些其他方法。

感謝

回答

5

如果出版物類型基本上是靜態的,枚舉的罰款

有一個查詢嵌入

inner join lookuptable lt on lt.id = (int)myenum.sometype 

並添加

inner join lookuptable lt on lt.name = "somehardcodeddescription" 

之間可以說沒有什麼差別,他們既是嵌入常量,前者也具有良好的d efined類型背後

交替,你可以使用

inner join lookuptable lt on lt.name = myenum.sometype.ToString 

我更喜歡前者

如果,另一方面,新的查找類型可以添加代碼展開後,然後枚舉會很快就過時了;

但如果核心組靜態的枚舉值的代碼需要和其餘不之事,則前者的解決方案仍然是細

像往常一樣,「這取決於」 ;-)

+0

就像我懷疑的一樣。如果需要更改我的類型表中的數據(但大多數情況下類型表是靜態的),則問題歸結爲可維護性。 – Azim 2008-10-31 00:13:59

5

在過去的生活中保持了這樣的東西,我同意史蒂文認爲enum是相當合理的。你的代碼是清晰的,而enum意味着如果你添加數據類型,你只需要更新一個文件。

我也建議徵求意見的enum,這就很清楚,值需要匹配那些在Publication Types表中您的數據庫。

好的問題,順便說一下! +1來清晰地解釋問題,並花時間在發佈前集思廣益。

2

我認爲這取決於您的出版物列表將在多久出現一次更改,以及您可以輕鬆地推出更新應用程序。如果列表不會經常更改,或者如果在現場更新應用程序非常簡單,那麼枚舉就很有意義。如果列表可能頻繁更改,或者更新應用程序特別困難,那麼將該列表保留在數據庫中的表中是明智的。

0

由於各種原因,將列表(例如我的發佈類型列表和其他列表)保存在一個地方是很好的做法;數據庫。那麼只有一個地方讓他們改變。然而,在我看來,這增加了代碼的一些複雜性,如果我想引用特定的發佈類型(如Journal Articles),我仍然需要在代碼中包含一些硬編碼元素。因此,具有一個枚舉類型反映在表中的數據給我叫我的計數功能以可讀的方式

countPublications(authorID, publicationType.JournalArticle) 

如果這是不可能的表的數據發生變化的可能性,我可以在評論數據庫提醒維護者(可能是我)更新代碼中的枚舉類型,反之亦然。

謝謝大家的回答。我現在可以放心了。

相關問題