我正在寻找可能的方法来为分布式表建模并为该表提供本地异常。考虑这样一种情况,总部发布分发给分支机构的产品/价格列表,并且他们将该价格列表加载到其本地数据库中。现在有时这些分支机构想要将总部价格更改为当地价格。显然,我们可以简单地更新本地数据库中的价格,但是当应用下一次总部更新时它会丢失。我们也只想阻止单个列,而不是更改行中的其他字段。
例如。总公司送
| Name | Price |
|------|-------|
| ABC | $5 |
| DEF | $8 |
在一个数据库中(比如说 100 个),我们希望 ABC 的价格为 3 美元。即使收到总部的未来更新,这 3 美元也应继续适用。总部不知道这个本地异常。
过去我们通过两种方式做到这一点。第一个是维护第二个 LocalProducts 表,其中包含要应用的更改 - 然后当应用总部版本时,将从 LocalProducts 读取任何本地更改并替换分发的值。这工作正常,但随着表大小的增加而受到影响。
我们尝试的第二种方法是复制列并使用合并,例如,而不是select price where name='abc'
我们将使用select coalesce(localprice,price) where name='abc'
这工作正常,但有开销,我们必须更改每个 SQL 并记住在未来的开发中也这样做。
还有其他更好的方法吗?我正在寻找与数据库无关的解决方案,目标数据库是 ODBC(90% sql/server)、SQL-Lite 或 MS-Access。如果有帮助,可以忽略访问,它正在被积极淘汰。引擎特定的解决方案是可以的,我们可以检测引擎并使用不同的技术,但不希望每个引擎都有不同的技术。
其他注意事项
- 数据由应用程序分发,而不是内置复制。这意味着我们可以在加载阶段拥有代码/逻辑
- 多个表都需要此功能,而不仅仅是上面的示例
- 一些表具有可能涉及的合理数量的列,但通常不会。
- 大多数表都不大,最大的可能有 50M 行,最小的情况下只有 7 行。
(请随时重新标记这个问题 - 不完全确定哪些标签是相关的。是的,多年来我已经花了很多时间调查这个问题)