gpt4 book ai didi

mongodb - 文档数据库如何处理对象之间不断变化的关系(或者根本不处理)?

转载 作者:可可西里 更新时间:2023-11-01 10:01:33 25 4
gpt4 key购买 nike

例如,在项目开始时,我想存储一组公司,并在每个公司内存储一组员工。

由于我使用的是文档数据库(例如 MongoDB),因此我的结构可能如下所示:

+ Customers[]
+--Customer
+--Employees[]
+--Employee
+--Employee
+--Customer
+--Employees[]
+--Employee

如果以后的新要求是让一些员工在多家公司工作,会发生什么情况?

如何管理文档数据库中的这种变化?

文档数据库的简单性是否会成为您最大的敌人,因为它会创建不易修改的脆弱数据结构?

在上面的示例中,我必须运行修改脚本来创建一个新的“员工”集合,并将每个员工移动到该集合中,同时维护某种关系键(例如每个员工的 CompanyID)。

如果我把上面的事情做得足够彻底,我最终会得到很多集合,只有很少的层次结构,并且文档是通过键连接的。

在那种情况下,我是否仍在按应有的方式使用文档数据库?

它不是变得更像一个关系数据库吗?

最佳答案

具体来说说 MongoDB...因为数据库不像关系数据库那样强制执行任何关系,所以您需要维护任何类型的数据完整性,例如这种情况。它在许多情况下非常有用,但您最终会编写更多的应用程序代码来处理这类事情。

综上所述,使用像 MongoDB 这样的系统的关键是对您的数据进行建模以适应 MongoDB。如果您使用的是 MySQL,那么您上面的内容是完全有意义的...如果您将数据结构化为关系数据库,那么使用 Mongo 绝对会遇到麻烦。

如果您的员工可以在一家或多家公司工作,我会将其结构化为:

// company records
{ _id: 12345, name : 'Apple' }
{ _id: 55555, name : 'Pixar' }
{ _id: 67890, name : 'Microsoft' }

// employees
{ _id : ObjectId('abc123'), name : "Steve Jobs", companies : [ 12345, 55555 ] }
{ _id : ObjectId('abc456'), name : "Steve Ballmer", companies : [ 67890 ] }

您可以在 employees.companies 上添加一个索引,这样可以非常快速地获取为给定公司工作的所有员工...无论他们为多少家公司工作.为每个员工维护一个简短的公司列表比为一个公司维护一个大的员工列表要容易得多。要获取一家公司及其所有员工的所有数据,需要两次(快速)查询。

Doesn't the simplicity of a document database become your worse enemy, since it creates brittle data structures which can't easily be modified?

简单性可能会让您着迷,但以后更新和更改非常很容易。您可以通过 Javascript 编写更改脚本并通过 Mongo shell 运行它们。

关于mongodb - 文档数据库如何处理对象之间不断变化的关系(或者根本不处理)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com