我应该使用枚举还是查询数据库中的表格?

时间:2008-10-31 00:05:53

标签: .net data-structures

在我的数据库中,我有表定义类型的表,例如

表:出版物类型


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

通过ID键与具有 TypeID 字段的发布表相关联。

然后我创建一个PublicationTable数据表我的.NET应用程序,我想根据发布类型进行过滤。例如,以下函数为我提供了特定作者和出版物类型的出版物数量。


    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. 以某种方式使用发布类型表来过滤发布数据集,但我还没有理解如何执行此操作。

  4. 我应该考虑哪些其他方法。

    由于

4 个答案:

答案 0 :(得分:5)

如果发布类型基本上是静态的,则枚举很好

嵌入

之间几乎没有什么区别
inner join lookuptable lt on lt.id = (int)myenum.sometype 

在查询中并添加

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

它们都是嵌入式常量,前者只有一个明确定义的类型

或者你可以使用

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

我更喜欢前者

另一方面,如果在部署代码之后可能添加新的查找类型,那么枚举很快就会过时;

但如果有代码需要的核心静态枚举值集,其余的无关紧要,那么前一个解决方案仍然没有问题

像往常一样,“它取决于”; - )

答案 1 :(得分:5)

在以前的生活中保留了这种东西,我同意史蒂文的观点,enum非常合理。您的代码清晰,enum表示如果添加数据类型,则只需更新单个文件。

我还建议对enum发表评论,明确表示这些值需要与数据库中Publication Types表中的值相匹配。

好问题,顺便说一下! +1用于如此清楚地解释问题并花时间在发布之前集体讨论解决方案。

答案 2 :(得分:2)

我认为这取决于您的出版物类型列表将来会发生变化的频率,以及您可以轻松推出应用程序更新的频率。如果列表不会经常更改,或者在字段中更新您的应用程序很容易,那么枚举是有意义的。如果列表可能经常更改,或者更新应用程序特别困难,那么将列表保存在数据库的表中是明智的。

答案 3 :(得分:0)

出于各种原因,将我的出版物类型列表等列表保存在一个地方会很好;数据库。然后他们只有一个地方可以改变。但是,在我看来,这增加了代码的一些复杂性,如果我想引用特定的发布类型,例如Journal Articles,我仍然需要在代码中有一些硬编码元素。因此,具有反映表中数据的枚举类型使我有可能以可读的方式调用我的计数函数

countPublications(authorID, publicationType.JournalArticle)

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

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