Enum Vs Inner Join / Where

时间:2012-10-05 13:50:36

标签: c# enums inner-join where

我已经用int定义了各种文本值。我将int值存储在数据表中,以便更好,更快地搜索。我有三个显示文本值的选项:

  1. 我在代码中声明了Enum并根据int值显示文本值。它是静态的,如果要添加新值,我必须更改代码。

  2. 为了使其成为动态的,我可以将int和text值存储在另一个数据库中的表中并由admin拥有它。管理员可在此表中更新新值。每当提取记录时,我都使用内连接来显示文本值。

  3. 我将实际文本存储在各自的数据表中。这将使搜索变慢。

  4. 我的问题是在以下条件下最好使用哪个选项?

    1. 数据表的记录数超过1到1千万。
    2. 有超过5000名用户在桌面上进行抓取,搜索,更新过程。
    3. 最大文本值数量为12,长度(最大值)为50个字符。
    4. 有30个具有上述条件和功能的数据表。

3 个答案:

答案 0 :(得分:1)

我喜欢选项#2和选项#1的组合 - 使用int,但在另一个数据库中有字典表 让我解释一下:

  • 将int和text存储在另一个数据库中的表中;
  • 在origin表中仅存储int;
  • 不要从另一个数据库连接表来获取文本,而是在客户端上缓存字典并解析该字典中的文本

答案 1 :(得分:1)

由于给出的原因,我不会选择选项1。枚举不作为查找。您可以使用创建字典替换1,但每次更改时都需要重新编译,这是不好的。

如果保证表格中的文本重复很多,那么在表格中存储文本(即选项3)是不好的。这正是你应该使用第2号建议的查找表的地方。

所以是的,将它们存储在数据库表中并通过它来管理它们。

如果它只是一张小桌子,加入不应该花很长时间。如果您担心另一种选择可能是在第一次需要时将查找表加载到代码中的字典中,并从小查找表中查找代码中的值。我怀疑你在加入时会遇到问题。

无论条件是什么(即记录数量等),我都会采用这种方法。条件确实使它更明智。 :)

答案 2 :(得分:0)

如果您拥有数百万条记录,那么尝试在服务器代码或客户端以任何形式启动此类结构几乎肯定没有意义。它需要保存在数据库中,恕我直言。

创建列表的查询需要足够智能,以便将返回记录的数量限制为可管理的数量。在这方面,分区视图或存储过程可能会有所帮助。

如果这主要是一个只读列表,只在管理活动的上下文中完成更新,则应该可以在客户端使用适当的索引和查询快速地对表进行查询。