非关系型数据库如何避免冗余数据?

14

我希望把数据迁移到mongoose,但我需要了解我的mysql表如何映射到基于no-sql数据库的表。

特别是我使用连接来避免复制数据。也就是说,如果我有两个表(B和C),它们都关联到一个表(A)。当需要时,我可以将表A连接到B或将表A连接到C。

在mongoose / mongodb即noSQL中,这将如何工作?

1个回答

13
您所描述的是规范化数据。在数据库中,规范化是关系数据库的一个特征。文档导向的NoSQL数据库(如MongoDB)使用一种不同的模式,其中您将数据围绕文档范例进行结构化。在这个世界里,数据被组织成文档(JSON 结构)。您可以指向其他结构,但总会有一些权衡。您必须决定什么级别的数据冗余才能发挥作用,但这实际上是一个次要问题。在类似于 MongoDB 的世界中,您的首要任务是在上下文中找出最合理的事情。例如,您可能有一个表示发票的文档,其中嵌入了行项目,但也有一个指向单独客户对象的指针。您还可以在同一数据库中设计一个以客户为基础的文档,其中嵌套了发票头部,甚至是嵌套的发票行项,或者是嵌套的发票头部和发票行项,或者购买的产品,带或不带产品目录信息。
在 MongoDB 的世界中,连接通常是昂贵的,但存储多种方式丰富的数据以满足各种目的是一个非常值得使用的功能 - 在正确的背景下。
您不应该将 MongoDB 视为关系型 DBMS 的替代品,而应将其视为更大的多语言持久性设计的一部分。您还可以使用其他数据工具,如 Redis 和 Neo4J,作为该世界的一部分来执行不同的操作。
对于不同的问题,需要选择不同的工具; MongoDB 并非万能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接