【发布时间】:2014-11-01 18:23:32
【问题描述】:
我最近开始在 MongoDB 学习,但我不太了解我们如何建立系统中实体之间的关系。
所以,由于我习惯于以 SQL 方式建立这种关系,当我将逻辑更改为以 NoSQL 方式思考时,我会感到有些困惑。
我看到 MongoDB 具有建模类型:嵌入式和引用。
如果我理解正确,引用就像我们在 SQL 中所做的:
示例:1 对 N
创建两个表来表示实体,例如用户和地址。
创建用户对象和地址对象
将地址 ID 放入用户对象中
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address_ids": [
ObjectId("52ffc4a5d85242602e000000"),
ObjectId("52ffc4a5d85242602e000001")
]
}
和嵌入式:
只创建一个表,在本例中为 User。
创建一个用户对象并在其中放置地址对象:
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address": [
{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "Chicago",
"state": "Illinois"
}]
}
所以,我的问题是:
要使用 MongoDB 等 NoSQL 数据库的最佳功能,我必须使用嵌入式建模?
在嵌入式建模中,我只创建了一个实体,而里面的实体,在这种情况下是地址对象,将没有 ID,因为我没有创建表?
【问题讨论】:
-
解决这个问题的最简单方法是考虑应用程序将如何访问这些数据。您需要将
address放入user中,如果从应用程序中检索用户时,您还需要所有关联的地址对象,因此无需连接(MongoDB 不支持) .
标签: sql mongodb data-modeling nosql