我将使用MongoDB和nodejs构建我的第一个项目(家谱数据库),我问自己,如果我的数据模型是正确的选择:
人员文件(简化):
{
"_id": ObjectId("123"),
"modified": ISODate("2015-02-04T16:52:32.601Z"),
"birth": ISODate("1995-02-04T16:52:32.601Z"),
"name": "peter"
}, {
"_id": ObjectId("456"),
"modified": ISODate("2015-02-04T16:52:32.601Z"),
"birth": ISODate("1999-02-04T16:52:32.601Z"),
"name": "uschi"
}
关系文件(简化):
{
"sourceID": ObjectId("123"),
"targetID": ObjectId("456"),
"type": "Married",
"modified": ISODate("2015-02-04T16:52:32.599Z"),
"startrelation": ISODate("2001-02-04T16:52:32.601Z"),
"endrelation": ISODate("2007-02-04T16:52:32.601Z"),
"_id": ObjectId("54d24e5033bfc203aaaad590")
}
昨天我尝试检索所有人及其相关人员的列表,并担心我的数据模型,因为我需要大量代码来生成以下结果:
items: [
{
"_id": ObjectId("123"),
"modified": ISODate("2015-02-04T16:52:32.601Z"),
"birth": ISODate("1995-02-04T16:52:32.601Z"),
"name": "peter"
"married": [{
"_id": ObjectId("456"),
"modified": ISODate("2015-02-04T16:52:32.601Z"),
"birth": ISODate("1999-02-04T16:52:32.601Z"),
"name": "uschi"
}, ...]
}, ...]
该解决方案有问题吗?
答案 0 :(得分:1)
我在这个解决方案中看到的主要问题是您使用MongoDB来存储关系数据。我过去做过这件事而后悔了。考虑使用Postgres。它是一个关系数据库,但也有一个名为hstore的功能,如果你的模式有一些可能没有很好定义的区域,它允许你存储和查询任意结构的json。
答案 1 :(得分:0)
图形数据库似乎与您的问题域完美匹配。 这样你就不必实现与"关系相关的所有逻辑。在你的申请中。 GraphDB本身就能理解它们。
即。 neo4j
图表数据库允许
轻松处理复杂的关系
快速遍历关系
快速搜索朋友类型的关系"或者与珍妮特有关的吉姆
一般情况下,如果您打算以各种方式查询关系中的数据,那么图数据库就是您的选择,