【发布时间】:2011-05-18 17:29:43
【问题描述】:
我想知道您的开发商店或项目中用于处理查找值的协议是什么,例如世界各国或美利坚合众国的州。
我看到它以两种不同的方式完成:在我工作的一个地方,我们的查找都存储在一个带有前缀“L_”的数据库表中,并具有以下列:id、code、desc、ordersequence。因此,例如,对于世界各国,我们将有一个类似的表格:
CREATE TABLE L_Countries(
CountryID INT IDENTITY(1,1) PRIMARY KEY,
CountryCode VARCHAR(10) NOT NULL,
CountryDesc VARCHAR(50) NOT NULL,
OrderSequence INT NULL
)
最近我看到了一个将查找纳入枚举的示例,例如:
enum Countries
{
Croatia = 1,
Slovenia = 2,
Serbia = 3,
// and so on
}
如果这些来自数据库表,则有一个实用程序可以为枚举生成 C# 代码。否则,有人只是花时间对所有条目进行硬编码,假设值不太可能改变。对于枚举中的数值,如果存在,则根据数据库中对应查找表中的 ID 列进行硬编码,或者仅根据从 1 开始的条目进行硬编码。
无可否认,我赞成前一种方法的论据是,它非常灵活,可以选择使用代码或完整描述、操纵顺序以及进行更改而无需重新编译。尽管从它们生成代码的选项是可能的,但一个很大的优势是它们在降级到数据库时仍然是真正的“查找”。最后,它们的使用方式很灵活:作为 Dictionary 集合中的值或使用服务器端代码生成 ASP.NET ListItems 或 html 组合框元素。
我听到的关于后者的论点是,值不会改变,并且即使在应用程序级别缓存它们,也必须从数据库中检索查找值存在开销。通过对它们进行硬编码或生成一个 Enum,它们可以在没有数据库检索的情况下使用。
我的问题如下:
哪个选项对您更有意义,或者,如果您的回答是“视情况而定”,您能否给出硬编码枚举优于跨整个应用程序的数据库查找的场景?
您还见过其他处理查找的优雅解决方案吗?我曾在一个应用程序中工作,其中所有查找都有一个表(它包括一个“查找名称”列)作为示例。您的替代方法与上述两种方法相比如何?
【问题讨论】:
标签: database-design application-design lookup-tables