显示/更新派生信息的最佳方式?

时间:2010-02-12 17:54:52

标签: database-design

我面临的一个常见问题是必须在详细信息页面和概览表中显示派生信息。

例如,根据多个子项的状态值的状态,可能存在1个项的状态。似乎存储主项目的派生状态是错误的,但是对这些信息进行排序和过滤也很麻烦。

处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我不确定,我的问题是否正确。为了解释我如何理解你的问题,我将使用例子。

示例:我们有一辆汽车(物品)及其零件:车轮,发动机,车门等(子项)。汽车的状态来自其零件的状态。例如:如果发动机状态为“已损坏”,则汽车状态为“已损坏”,或者如果车门状态为“缺失”且发动机为“正常”,则汽车状态为“可用”。

如果此示例符合您的意思,那么您有以下选项:

  1. 每次显示汽车状态,生成报告等时计算派生值。优点:模型始终保持一致。 缺点:计算可能需要花费太多时间和资源。
  2. 首次计算派生值并将其存储在数据库中。每次子项状态更改(触发器,存储过程,业务逻辑)时更改它。 优势缺点与1相同,但如果您在1和2之间选择,则必须考虑更频繁发生的事情:子项状态发生变化或者请求有关该项目的信息。
  3. 如果数据库负载很高且有关项目的信息不是时间关键的,那么当数据库上的负载最小时,您可以重新计算项目的状态,并将它们存储在项目字段中。 优势:最大限度地减少负载。 缺点:派生字段的返回值可能不正确。
  4. 在上次计算派生状态时保存子项的状态。然后将当前状态(当请求项目的状态时)与保存的状态进行比较。如果更改,则重新计算其他返回存储的值。 优点:降低负载。 缺点:需要为状态的最后值添加其他字段。
  5. 这些是选项,但只有您知道具体信息(数据库负载,派生值计算算法的复杂性,更常见的子项状态更改或项状态读取等)。所以只有你能决定什么适合你的情况。

相关问题