首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只读端的事件源/CQRS数据库约束

只读端的事件源/CQRS数据库约束
EN

Stack Overflow用户
提问于 2017-08-15 18:02:23
回答 2查看 497关注 0票数 2

我们公司希望为我们的金融系统实施事件采购/CQRS。

对于只读模型,我们应该应用数据库约束吗?我知道约束不应该在写事件存储端。只读模式方面如何?

包括:

  • 唯一约束
  • 外键约束
  • 检查约束
  • 默认约束
  • 指称完整性
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-16 13:27:36

对于只读模型,我们应该应用数据库约束吗?我知道约束不应该在写事件存储端。只读模式方面如何?

那可能没什么用处。

从根本上讲,有两个案例。一是读取模型中的约束与域模型的约束不一致。如果域模型是权威的,那么读取模型是错误的。

另一个是约束是对齐的,但是read模型认为约束被违反了,因为它对正在发生的事情有一个不完整的视图。IE,域模型发出事件[A,B,C,D],但读取模型现在只看到[A,B,C]

现在,读取模型中的数据应该被理解为陈旧;因此,只有在域的新的、一致的视图可用时才更新读取模型并不是不合理的。

但即便如此,仍然不清楚该约束是由数据存储还是由填充存储的事件使用者强制执行。

我不确定数据库约束会在正常操作期间为您购买任何东西。

在异常操作期间,它们可能是一个有用的指南;如果有人试图“手工”修补读取模型,那么数据库中的约束的冗余副本可能会防止数据输入错误。(读取模型的通常恢复过程是销毁缓存副本并重新构建它;但如果这需要相当长的时间,则可以通过修复现有副本来更好地服务SLO,直到新副本可用为止)。

票数 1
EN

Stack Overflow用户

发布于 2017-08-24 18:42:37

我在读取模型上使用db约束。

  • FKs帮助级联删除,并告诉你(如果你得到一个例外)在你的应用程序中有一些情况,结果是不一致的状态(也许应用程序崩溃在过去的一点,读取模型没有更新)。一辆耐用的公共汽车缓解了这种情况。
  • 默认值只是默认值,我看不出有什么问题。
  • 我使用唯一的约束来达到幂等的目的,并在违规发生时忽略它。

您知道,您可以将db约束用于多个目的,它们都与写入模型中使用的业务约束无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45698761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档