在db - C#中存储静态数据是否合适?

时间:2011-02-10 13:27:46

标签: c# sql-server-2008 datagridview

我有这个问题,我不知道什么是最好的解决方案。

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

value 1
value 2

我希望用户从ComboBox控件中选择值,所以我有2个想法,但我不知道它最适合它。

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

B - 在我的数据库中创建单独的表,例如'LastWork',其中包含2列'LastWorkID','LastWorkName'并在其中插入我的值,然后我可以添加绑定源控件,我可以使用数据绑定项来将id作为整数存储在我的主表中,并显示用户的LastWorkName。

我更喜欢使用B方法,因为在某些形式中我有带编辑权限的DataGridView控件,我想在其中显示Combobox而不是Textbox来从这些自定义值中进行选择。

我希望你理解我的问题。

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

在规范化数据库中,您的“选项B”通常是要走的路,因为它可以消除重复数据。当您需要名称(而不仅仅是ID)时,它可能会在您的查询中引入额外的连接,但它也允许您轻松地重命名查找名称而不更改其基础ID。

出于性能原因,缓存查找值(例如您在业务层中描述的查找值)通常是一个好主意,这样您的查找表就不会一次又一次地被击中(例如在构建网格的多行时)。

答案 2 :(得分:1)

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