表上的派生状态字段?

时间:2011-10-20 05:51:10

标签: database database-design relational-database

我的客户是一家长期租赁公司。 所以我们有

 Goods 
    pk modelId

 Stock
    pk stockId, fk modelId

 Rentals ( rented stock)
    pk rentalId fk stockId

此外,股票可能会采取其他状态,例如被修复等,并且可能同时拥有多个状态。

这将使我的生活更容易将状态字段放在库存表上,但最终它是我可以从其他表推断的派生数据。 一个例子是查找库存商品(未租赁)的总数,包括库存数量为0的商品。 我应该

  • 将已租借的onRepair等状态字段添加到股票表
  • 维持现场库存
  • 每次查找?

    ps股票和货物表是分开的,因为有一个比我在这里解释的股票类型,即制造商等更复杂的分类法

1 个答案:

答案 0 :(得分:1)

如果状态或其他属性可以从其他表派生,则更容易实现的选项是保持原样并“每次都查找”。你的桌子保持标准化。并且您不必使用触发器等复杂解决方案来维护任何派生值。

您何时需要考虑另一种选择?当上述方法变得缓慢时 - 即使您已经优化了查询。如果您必须计算10年内股票价格和数千种股票和商品的平均值,那么查询的速度就不足以快速计算。

因此,您可以首先使用所需的聚合或其他派生数据添加表或字段。您可以使用索引视图(大多数RDBMS具有该功能)或用于聚合数据的其他表 - 这可以很好地用于不能再更改的数据,例如前几天/几个月/几年的股票价格的统计数据。当日/月/年结束时,计算完成(一次)并更新表。然后,您可以快速为那些表格查找较旧的数据,并为较新的数据“激活”表格。

更复杂情况的其他选项包括维护派生值的触发器。我会用这个作为最后一个资源,但我确信在这个问题上有相反的观点。