当您希望更改原始表以自动传播到汇总表时,最佳数据库设计/体系结构

时间:2012-04-19 10:44:19

标签: database architecture nosql

我正在尝试为系统找出最佳的数据库/数据架构方法,我需要更改原始的“低级”表,理想情况下,自动传播基于底层数据存储视图的各种不同的表。 / p>

让我举一个简化的例子。

想象一下,我有以下表格:

  1. 各种超市的食品配料和价格表
    • 例如。一个有{ketchup:1.19,黄油:0.99}的Safeway表,以及一个{egg:1.99,黄油:0.79}的沃尔玛表
  2. 存储每种成分最便宜位置的表格
    • 例如。 {butter =>沃尔玛:0.79}
  3. 一张能够以最便宜的食谱价格存储食谱的餐桌(由表2中最便宜的食材价格组成。
    • 例如。 {“ketchupy-egg-breakfast =>总计:3.97,成分=>黄油:0.79,鸡蛋:1.99,番茄酱:1.19
  4. 一张桌子,在几种替代食谱中储存最便宜的早餐食谱。
  5. 现在想象一下,我有工人外出并按小时更新表(1)的值。是否有数据库设计或体系结构会强制更新表2中依赖于表1中更改的内容的任何条目,同样会将更改传播到表3和表4.我想这可以通过代码实现一系列级联工作,但我想知道是否有一种不太复杂和更优雅的方式。

    感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

看起来非常适合CQRS pattern。存储项目时,您应该只有一个数据源。

来自链接文章:

  

CQRS代表Command Query Responsibility Segregation。这是我第一次听到Greg Young描述的模式。其核心是一个简单的概念,即您可以使用不同的模型来更新信息,而不是用于读取信息的模型。

CQRS可以帮助您接收一种信息(更新模型),然后将其转换为您可以查询的内容(读取/查询模型)。

答案 1 :(得分:2)

我认为'优雅的方式'是正确地规范你的桌子。

例如,你不会有一个表用于Safeway,另一个表用于沃尔玛等 - 相反,你将有一个用于'零售商'的表,它将列出Safeway和沃尔玛, 然后在“产品”的一个表中列出鸡蛋,番茄酱等 然后是第三个,比如说'retail_item',它列出了retailer_id,product_id,price等。

然后您可以简单地查询您提出的所有问题......