存储在DB中还是不存储?

时间:2010-05-25 12:14:36

标签: asp.net sql-server

我的网络应用程序中的字符串列表很少,我不知道在DB或只是在类中存储的位置。

即。我有7个主要浏览器用户进入该网站。我想保存这些统计数据,因此我需要在UserLogin数据库中创建浏览器列。我不想浪费空间和资源,所以我可以在每个登录行中保存完整的浏览器名称。所以我要么需要保存browserID字段并将其与浏览器表连接起来,这些表将在数据库规范化规则之后存储名称,或者有一些Dataholder抽象类,它有一个浏览器列表,我可以从中检索浏览器名称...

问题该怎么办?这几个数据列表我每个包含不超过200个项目,所以我认为将它们作为抽象类是有意义的但我不知道MS-SQL是否会很好地处理多个连接。想想当我有国家,IP,语言,浏览器以及更多统计数据的用户时。

感谢

2 个答案:

答案 0 :(得分:1)

MS SQL非常好地处理多个连接;由您决定存储数据的位置。您也可以将XML视为另一种选择。我会考虑数据库或XL;更改值比如果值在代码中更容易(必须重新编译/部署以在生产中更改)。

HTH。

答案 1 :(得分:1)

关于这一点,我一直站在围栏的两边。

我的经验法则是:

如果其中一个列表发生变化,我是否也必须对代码进行更改?

(例如:在你的情况下,如果有人明天写了“另一个浏览器”,我是否需要编写适合它的代码?)

如果答案是“很可能是”或“绝对”,您可以将其留在代码中。 在所有其他情况下(甚至只是“可能,50%-50%”)你最好把它放在数据库中,或者至少是属性文件。

请考虑这一点:如果您希望必须提供基于此数据的统计数据(例如:“有多少用户使用资源管理器”),最好将其放入数据库中:它会成为您的域数据的一部分,因此必须在那里。


关于“域数据”部分。

存储在数据库中的信息是应用程序的“域数据”。从某种意义上说,它是一个(希望是一致的)代表你的应用程序的代表 - 它代表了你的应用程序的“已知宇宙”。 如果你同意这个定义,那么你也必须接受在数据库中拥有99.9%的“现实”是没有意义的,而在它之外有0.1% - 如果没有别的话,它会使一些操作变得麻烦(如果你只存储smallint,你无法创建有意义的报告,而无需使用类将其解码为“1”并将其解码为“Firefox”或为最终用户提供其他密钥。 你也不可能利用一些固有的数据库技术,比如外键(如果你只使用一个smallint而不将它与任何其他表相关联,谁保证“10”在你的域中是可接受的值?)