Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在db-C中存储静态数据好吗?_C#_Sql Server 2008_Datagridview - Fatal编程技术网

C# 在db-C中存储静态数据好吗?

C# 在db-C中存储静态数据好吗?,c#,sql-server-2008,datagridview,C#,Sql Server 2008,Datagridview,我有这个问题,我不知道什么是最好的解决办法 我有一个名为Employees的表,还有一个名为LastWork的列,该列应该只有我选择的自定义值,例如: value 1 value 2 我希望用户从ComboBox控件中选择值,所以我有两个想法,但我不知道什么是最好的 A-在Items属性中将这些值作为字符串添加到Combobox中,并将它们作为字符串存储在DB中 B-在我的数据库中创建单独的表,例如“LastWork”,其中包含两列“LastWorkID”、“LastWorkName”,并在其

我有这个问题,我不知道什么是最好的解决办法

我有一个名为Employees的表,还有一个名为LastWork的列,该列应该只有我选择的自定义值,例如:

value 1
value 2
我希望用户从ComboBox控件中选择值,所以我有两个想法,但我不知道什么是最好的

A-在Items属性中将这些值作为字符串添加到Combobox中,并将它们作为字符串存储在DB中

B-在我的数据库中创建单独的表,例如“LastWork”,其中包含两列“LastWorkID”、“LastWorkName”,并在其中插入我的值,然后我可以添加绑定源代码管理,我可以使用数据绑定项将id作为整数存储在主表中,并向用户显示LastWorkName

我更喜欢使用B方法,因为在某些表单中,我拥有具有编辑权限的DataGridView控件,并且我希望在其中显示Combobox,而不是Textbox,以便从这些自定义值中进行选择


我希望您理解我的问题。

在规范化数据库中,您的选项B通常是可行的,因为它消除了重复数据。当您需要名称而不仅仅是ID时,它可能会在查询中引入额外的联接,而且它还允许您轻松地重命名查找名称,而无需更改其基础ID


出于性能方面的考虑,缓存查找值(如您在业务层中描述的)通常是一个好主意,这样您的查找表就不会在构建网格的许多行时被反复命中。

通常数据规范化是一件好事,所以我也会选择B

通过有一个单独的表和一个外键关系,您可以加强数据完整性;轻松获得所有可用选项的列表,而不仅仅是所有选定选项;有一个地方可以更改选项的文本,例如,如果有人决定将其称为值1而不是值1,该怎么办?;等等等等


在一个只有两种可能的选择的小型应用程序中,这些可能不会带来巨大的好处,但我们都知道,随着时间的推移,应用程序的范围往往会不断扩大。

我总是将它们保存在数据库中。如果你必须本地化你的应用程序,这会很有帮助。此外,它还允许您应用数据库的引用完整性检查。

它们是静态的吗?它们本质上是常数吗?工作日的英文名字?或者它们有时会改变吗?@Lasse,以你的工作日英文名称为例,加入国际化。突然间,它们不再是常数了。@Michael,英文的工作日名称仍然是常数。不过我明白你的意思。+1提到数据名的标准化是多么容易,因为它们是从中心位置提取的。谢谢你的帮助,但我的主要想法是将LastWorkID值存储在主表中,并使用它从另一个表中获取LastWorkName并显示它,这样我就不需要使用任何外键关系。+1表示数据完整性,借助于额外的查找表。这种场景的一个很好的补充是通过创建一个类似的枚举在中间层实现代码自动化。因此,开发人员不会在每次更改DB表时重复和同步这些值:@SzamDev:我建议您强制FK,否则可能会添加无效ID。它不会花费你很多钱,但会使数据库设计更好。@SzamDev,每当你从一个表到另一个表有一个严格定义的关系时,通常最好定义一个外键来强制执行它。如果(比如)没有任何可用选项可用,您可以始终使列允许空值并插入空值-空值是一种变相的祝福,但有时它们确实都是有用的和适用的。如果表是两个小列乘两行的小表,它很可能会保留在RAM中缓存,因此,即使您最终进行了表扫描,性能影响也应该是最小的。@Michael Kjörling-True,除非数据库位于不同的机器或网络上。无论SQL缓存如何,延迟都可能会影响性能。我编写的大多数应用程序中都有50多个名称/值表,因此我倾向于编写某种包装器,以确保无论大小或数据库位置如何,性能都不会成为问题。但这是假设业务层与应用层位于同一主机上,否则您几乎回到了开始的位置。@Michael Kjörling同意,如果所有层都是分布式的,则需要适当地定位缓存,或者需要考虑只检索一次所需数据的应用程序设计。