3

目前,我们通过创建不同的查找表(性别、状态等...)将静态数据(例如性别、婚姻状况、状态等)存储到数据库中。我们有近 10 个查找表。所有这些表都是事务表 - 用户(存储所有用户的人口统计信息)的 FK。其中一些静态数据也被其他事务表使用。现在,在获取用户信息时,我们通常会加入这些表并获取相关文本。当然,这么多的连接会产生性能问题,而且根据 MSDN,我们在选择查询中的连接数不应超过 5 个。现在为避免这种情况,我们可以将所有静态数据移动到 xml 文件并从中读取。当然我们会缓存 xml 数据,所以它只会被读取一次。我想知道是不是一个好办法。我可以看到以下权衡 -

  1. 无法保持参照完整性。
  2. 在使用负载平衡时,所有服务器都需要有 xml 文件。

我不希望这些值在枚举中,因为这些需要本地化。我看到保留在 xml 中的唯一优点是它减少了 DB 的开销(创建 10 个表)。我可以很好地缓存存储在 DB 中的静态数据。那么想知道仍然将数据存储在 xml 中是比 DB 更好的选择吗?

PS:应用程序是 Web 应用程序,在 .net 3.5 中开发。

4

1 回答 1

0

解决方案 1

不要使用合成键,即您的 MaritalStatus 表具有 msId 和 StatusText 列(例如 1,“Married”),并以 msId 为键。然后,您的数据表包含一个 msId 字段,并且必须始终连接到 MaritalStatus 表才能获取文本。相反,只需存储有用的文本,并将其设置为唯一键。在这种情况下,表格将仅包含单个文本列(“已婚”、“单身”等)。然后数据表有一个 MStatus 文本字段,其中有一个指向 MaritalStatus 表的外键。但是当你读取数据表时,你已经有了状态文本,所以你不需要加入引用表。该约束保持数据完整性。当然,如果您需要在引用表中存储多个列,这将不起作用,但我仍然建议尽可能避免使用合成键,

解决方案 2

有一个 ReferenceData 表。为类型、ID 和值创建列。使用类型字段而不是单独的表名,例如“MaritalStatus”。连接到为 Type 列指定文字值的引用表,然后匹配 Id 或 Value。这可能也适用于 FK 约束(但需要检查不同的数据库软件)。

于 2013-08-21T12:45:32.247 回答