提问者:小点点

将关系数据库转换为非关系数据库的最佳实践?


我有一个MySQL数据库,我需要创建一个Mongo数据库(我不关心保留任何数据)。

那么对于基于MySQL的关系表来设计结构(mongoose.schema),有什么好的实践吗?

例如,SQL有一个表users和一个表courses,关系为1:n,我是应该也在MongoDB中创建两个集合呢,还是在user document中创建一个新字段courses:[]并只创建user collection更好呢?


共2个答案

匿名用户

模式定义应该由应用程序的用例驱动。

在这些条件下访问和修改数据。 它是主要实体。

当一个用户被加载时,你总是想知道用户的课程吗? 这将是嵌入的一个论点。

您是否可以在不了解所有用户的情况下更新课程,例如更新课程名称? 要列出所有课程的概览吗? 这将是一个参数,用于提取到自己的集合中。

因此,对于这样的迁移没有通用的指导原则,因为仅从模式定义,不能派生出用例。

匿名用户

如果你不关心数据,最好的做法就是从头开始重新设计它。

NOSQL在许多方面与RDBMS不同,因此直接映射几乎不是有效的,而且在许多情况下根本不可能。

您首先需要回答自己的问题(可能在问题中提到)是为什么您首先需要更改数据库。 Mongo可以比SQL更好地解决不同类型的问题,它们需要不同的数据模型。 它们没有一个是免费的,所以你需要了解其中的权衡。

您可以从非常简单的规则开始:在SQL中,您根据业务对象建模数据并描述它们之间的关系;在Mongo中,您根据需要响应的查询建模数据。 一旦你掌握了这个想法,它就会让你问一些可以回答的问题。

可能值得从https://www.mongodb.com/blog/post/building-with-patterns-a-summary开始阅读。

这是一个古老但仍然非常有用的https://www.mongodb.com/blog/post/6-rules-of-thumb-for-Mongodb-Schema-design-part-1,请记住它是很久以前编写的,当时mongo还没有很多V4+特性。 尽管如此,它还是用简单的例子描述了mongo数据建模的原理,从那以后它并没有发生太大的变化。