有固定数据表或枚举?

时间:2016-07-14 06:15:01

标签: c#

我有一个具有常量值的表...我在我的数据库(即SQL)中有这个表或者在我的代码中有一个枚举并删除我的表是否更好? 我的表只有2列,最多20行,这些行是固定的,并且第一次运行应用程序时会被填充一次。

4 个答案:

答案 0 :(得分:1)

我依赖于那些常数的特征。

如果它们是一些永远不应该改变的低级系统常量(比如pi = 3.1415),那么最好只将它们保存在某个配置文件的代码部分中。而且,如果性能是关键参数,并且您经常使用它们(几乎每次请求),最好将它们保留在代码部分中。

如果它们是某些常量(可能是业务常量),将来可以更改它们可以将它们放在表中 - 那么您可以更灵活地更改它们(例如从管理面板)。

答案 1 :(得分:0)

我建议为你的案子创建一个Enum。由于值是固定的(,我假设表不会经常更改),您可以使用Enum。在数据库中创建表将需要不必要的数据库命中,并且需要数据库连接,如果您使用Enum,则可以跳过该数据库连接。

另外很多可能取决于你对你的价值做多少操作。例如:查询您的Enum值以从表中获取不同的值非常繁琐。然而,如果您将使用表方法,那么它将是一个简单的select distinct。因此,您可能需要调查您的需求以及您将对这些值执行的操作。

就性能而言,您可以查看:Enum Fields VS Varchar VS Int + Joined table: What is Faster?

  

如您所见,ENUM和VARCHAR结果几乎相同,但加入   查询性能降低了30%。还要注意时间本身 -   遍历相同数量的行全表扫描执行大约25   比通过索引访问行更好(对于数据的情况)   适合记忆!)

     

所以,如果你有一个应用程序,你需要有一些表字段   有一小部分可能值,我仍然建议你使用   ENUM,但现在我们可以看到性能影响可能不会那么大   你期待。虽然又取决于您的数据和查询。

答案 2 :(得分:0)

这取决于您的需求。

您可能希望翻译枚举值(如果您在GUI中显示)并根据翻译的值排序一组记录。例如:假设您有一个Employees表和一个Position列。如果记录集很大,并且您想要按翻译的位置列进行排序或排序,那么您必须将枚举值+翻译保留在数据库中。

否则KISS并在代码中使用它。您将有空闲时间向数据库询问值。

答案 3 :(得分:0)

这实际上取决于你真正需要的东西。

使用Enum

  1. 访问速度更快
  2. 绑定到某个应用程序。 (虽然您可以通过将其作为参考来共享,但它看起来不像使用DB那样好)
  3. 您可以在switch语句中使用
  4. Enum通常不关心价值,仅限于int。
  5. 使用DB

    1. 速度较慢,因为你必须进行连接和查询。
    2. 数据可以广泛共享。
    3. 您可以将值设置为任何值(任何类型的任何值)。
    4. 所以,如果你只在某些应用程序中使用它,那么Enum就足够了。但是如果有几个应用程序要使用它,那么DB将是更好的选择。