fer*_*tor 9 database-design mongodb nosql design-choices
像往常一样,问题是在数据库中显示有向非循环图.我拥有的数据库的选择是关系数据库,如mysql或mongodb.我之所以选择mongoDb是因为关系数据库中的 DAG是一团糟,但如果有一个技巧我就是找不到请告诉我.
目标是在一个或多个MongoDB文档中映射DAG.因为我们有多个孩子和父母SubDocuments,没有可能.我遇到了多种设计模式,但我不确定哪种模式最适合.
祖先阵列是由mongoDB文档建议的.而且很容易理解.据我了解,我的文档看起来像这样:
{
"_id" : "root",
"ancestors" : [ null ],
"left": 1
}
{
"_id" : "child1",
"ancestors" : [ "root" ],
"left": 2
}
{
"_id" : "child2",
"ancestors" : [ "root", "child1" ],
"left": 1
}
Run Code Online (Sandbox Code Playgroud)
这允许我find像这样的元素的所有孩子:
db.Tree.find({ancestors: 'root'}).sort({left: -1})
Run Code Online (Sandbox Code Playgroud)
所有的父母都这样:
db.Tree.findOne({_id: 'child1'}).ancestors
Run Code Online (Sandbox Code Playgroud)
我的第二种方法是用 s 替换字符串键DBRef.但是除了更长的数据库记录,我没有看到比祖先数组更多的优点.
children和的基于字符串的数组parents最后一个想法是不仅存储children每个文档的内容,而且还存储它parents.这会给我所有我想要的功能.缺点是我将通过两次存储所有关系创建的大量信息开销.此外,我担心管理的数量.例如,如果文档被删除,我必须检查所有其他文档以获取多个字段中的引用.