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

Posted

技术标签:

【中文标题】非关系数据库中如何避免冗余数据?【英文标题】:How is redundant data avoided in non relational databases? 【发布时间】:2018-05-30 04:52:56 【问题描述】:

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

特别是我使用连接来避免复制数据。也就是说,如果我有 2 个表( B & C )与 1 个表( A )相关。我可以在需要时将表 A 连接到 B,或者在需要时将表 A 连接到 C。

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

【问题讨论】:

【参考方案1】:

您描述的是标准化数据。数据库中的规范化是关系数据库的一个特征。 MongoDB 等面向文档的 NoSQL 数据库使用不同的范式,您可以在其中围绕文档范式构建数据。在这个世界中,数据被排列成文档(JSON 结构)。您可以指向其他结构,但总是需要权衡。您必须决定什么级别的数据冗余有效,但这实际上是次要问题。在类似 MongoDB 的世界中,您的首要任务是找出在上下文中最有意义的内容。例如,您可能有一个文档表示带有嵌入行项目的发票,但也有一个指向单独客户对象的指针。在同一个数据库中,您还可能有一个围绕客户设计的文档,其中嵌套了发票抬头,甚至嵌套了发票行,或者嵌套了嵌套在里面的发票行的发票抬头,或者购买的产品,有或没有产品目录信息。

在 MongoDB 世界中,连接通常很昂贵,但以多种方式存储的丰富数据用于各种目的是一个非常值得使用的功能 - 在正确的上下文中。

您不应将 MongoDB 视为关系 DBMS 的替代品,而应将其视为更大的多语言(多语言)持久性设计的一部分。您还可以使用 Redis 和 Neo4J 等其他数据工具作为该世界的一部分来做不同的事情。

课程用马; MongoDB 不是万能的。

【讨论】:

以上是关于非关系数据库中如何避免冗余数据?的主要内容,如果未能解决你的问题,请参考以下文章

非冗余休眠列表映射 (OneToMany)

数据库的基本概念

数据库和数据仓库的关系

MongoDB

关系型数据库学习笔记

线性回归