C# 枚举与内部联接/其中

C# 枚举与内部联接/其中,c#,enums,inner-join,where,C#,Enums,Inner Join,Where,我用int定义了各种文本值。我将int值存储在数据表中,以便更好更快地搜索。我有三个选项来显示文本值: 我在代码中声明Enum,并根据int值显示文本值。它是静态的,如果要添加新值,我必须更改代码 为了使其动态化,我可以将int和text值存储在另一个数据库中的表中,并由管理员拥有。管理员可以在此表中更新新值。每当获取记录时,我都使用内部连接来显示文本值 我将实际文本存储在各自的数据表中。这将使搜索速度变慢 我的问题是,在以下条件下,哪个选项最适合使用 数据表有超过100万到1000万条记录 有

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

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

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

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

  • 我的问题是,在以下条件下,哪个选项最适合使用

  • 数据表有超过100万到1000万条记录
  • 有5000多名用户在表上执行获取、搜索和更新过程
  • 最大文本值为12个字符,最大长度为50个字符
  • 有30个数据表具有上述条件和功能
    我喜欢选项2和选项1的组合——使用int,但在另一个数据库中有字典表。
    让我解释一下:

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

    如果你确实有数百万条记录,那么几乎可以肯定,在服务器代码中或在客户机上以任何形式构建这样的结构是没有意义的。它需要保存在数据库中,IMHO

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


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

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

    如果保证像这里这样大量复制文本,那么将文本存储在表中(即选项3)是不好的。这正是您应该使用查找表的地方,正如您在第2条中所建议的那样

    是的,将它们存储在数据库表中并通过该表进行管理

    如果只是为了一张小桌子,那么连接应该不会花很长时间。如果您担心,另一种方法可能是在第一次需要查找表时将其加载到代码中的字典中,并从小型查找表中查找代码中的值。不过,我怀疑你会不会有问题,只是通过加入来实现


    无论条件如何(如记录数等),我都会采用这种方法。不过,这些条件确实使它更为合理

    我认为数以百万计的记录就是用来查找文本的INT所在的位置。我读到没有那么多的文本值被转换成整数(“最大文本值为12个数字和长度(最大)50个字符”)