【发布时间】:2020-06-17 20:11:00
【问题描述】:
假设卖方架构具有 60 多个嵌入字段,表示 1:1 和 1:M 关系以及嵌入文档和文档引用的混合,例如“director”、“addresses”和“bankAccounts”。我们绝对不会存储任何超过 16MB 文档限制的大文件)。您基本上拥有一个典型的、最佳实践的、非规范化的 NoSQL 模式设计。
一位朋友建议我们应该将之前嵌入的“director”、“addresses”和“bankAccounts”字段拆分为它们自己的架构和集合。每个都有一个添加的“sellerId”字段来指向它的创建所有者/卖家。
我朋友的论点是,通过这样做,我们的 GraphQL 类型和输入模式定义变得更容易定义和管理 - 考虑到卖方的 60 多个字段?因此,他现在可以将“directors”、“addresses”和“bankAccounts”分解为自己的类型和输入定义,而不是在我们的 GraphQL Schema 中创建一个单一的、庞大的 60 多个字段“类型”和“输入类型”定义
第一季度。这有什么有效的逻辑吗?规范化 MongoDB 以简化 GraphQL 模式类型和输入处理?
第二季度。假设我们确实打破了上述那些以前嵌入的字段,无论如何这些字段大多是陈旧且不经常查询的数据,那么这样做并在 MongoDB 中进行规范化真的有那么糟糕吗?
是的,我知道如果你规范化太多,为什么不使用 RDB/SQL?我猜是因为拥有 JavaScript 知识、使用 JSON 和 Mongoose ORM、资源有限,这使它成为一个有吸引力的数据存储。
【问题讨论】: