gpt4 book ai didi

asp.net - 将静态数据存储在数据库或文件系统中

转载 作者:数据小太阳 更新时间:2023-10-29 02:46:03 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

方案一

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

解决方案2

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

关于asp.net - 将静态数据存储在数据库或文件系统中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com