目前,我们通过创建不同的查找表(性别,州等等)将静态数据(例如,性别,婚姻状况,州等等)存储到DB中。我们几乎接近10个查找表。所有这些表都是FK到事务表 - 用户(存储所有用户的人口统计信息)。其他事务表也使用其中一些静态数据。现在,在获取用户信息时,我们通常会将连接放到这些表中并获取相关文本。当然,这些连接可能会产生性能问题,并且根据MSDN,我们在选择查询中不应该有超过5个连接。现在为了避免这种情况,我们可以将所有静态数据移动到xml文件并从中读取它们。当然,我们将缓存xml数据,因此它只会被读取一次。我想知道的是一个好方法。我可以看到下面的交易 - 1)不能保持参照完整性。 2)使用负载平衡时,所有服务器都需要有xml文件。
我不希望这些值在枚举中,因为这些值需要本地化。我看到保留在xml中的唯一优势是它减少了DB的开销(创建10个表)。我可以很好地缓存存储在DB中的静态数据。那么想知道仍然在数据库中存储数据是一个比DB更好的选择吗?
PS:应用程序是Web应用程序,在.net 3.5中开发。
答案 0 :(得分:0)
不要使用合成密钥,即您的MaritalStatus表有列msId和StatusText(例如1,"已婚和#34;),并且在msId上键入。然后,您的数据表包含一个msId字段,并且必须始终连接到MaritalStatus表以获取文本。 相反,只需存储有用的文本,并将其设置为唯一键。在这种情况下,表格只包含单个文本列("已婚","单"等)。 然后数据表有一个MStatus文本字段,带有MaritalStatus表的外键。但是当您阅读数据表时,您已经拥有状态文本,因此您不需要加入参考表。约束维护数据完整性。 当然,如果您需要在参考表中存储多个列,这不起作用,但我仍然建议尽可能避免使用合成密钥,除非自然密钥足够大以至于导致存储问题。
拥有一个ReferenceData表。为“类型”,“标识”和“值”创建列。 使用“类型”字段而不是单独的表名称,例如" MaritalStatus&#34 ;. 加入指定Type列的文字值的引用表,然后匹配Id或Value。这可能也适用于FK约束(但需要检查不同的数据库软件)。