2008-10-31 87 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) 

如果这是不可能的表的数据发生变化的可能性,我可以在评论数据库提醒维护者(可能是我)更新代码中的枚举类型,反之亦然。

谢谢大家的回答。我现在可以放心了。

相关问题