Aja*_*jar 7 database non-relational-database mongodb nosql
我会尝试尽可能直截了当地做到这一点.
来自MySQL并考虑表格,让我们使用以下示例:
假设我们有一个房地产网站,我们正在显示房屋清单
,我会使用下表:
据我所知,MongoDB可让您灵活地在不同的集合中设计您的Web应用程序,其中包含与关系数据库(规范化)非常相似的唯一ID,并且为了享受快速选择,您可以在集合,相关对象和数据中嵌套(未标准化) ).
回到我们的房地产房屋列表,用于填充它的查询在普通的关系数据库中相当昂贵,对于每个房屋,您需要查询其图像,评论,所有者和代理商,每个实体都位于不同的表中,其中包含其字段,你可能会使用连接并将多个查询合并为一个 - 昂贵!
输入MongoDB - 您不需要连接,并且您可以将房屋的所有相关数据存储在房屋集合中的房屋项目中,选择从未更快,这是天堂!
但是当您需要添加/更新/删除相关评论/代理/所有者/图像时会发生什么?
这对我来说是一个谜,如果我需要猜测,每个相关的集合都存在于其自己的集合中,并且在house表中的数据之上,并且一旦这些相关数据中的一个被添加/更新/删除,你就会'我必须在自己的集合以及房屋集合上更新它.在此更新时 - 我是否还需要查询其他集合以确保我使用所有更新的相关数据更新房屋记录?
我只是在这里猜测,非常感谢您的反馈.
谢谢,
Ajar
尝试这个方法:
找出哪个(或多个)实体是英雄
对于“英雄”,我指的是数据库所围绕的实体。让我们以你的例子为例。房地产例子的主角是房子*。
确定所有权
查看其他实体,例如业主、代理机构、图像和评论,并问问自己将他们的信息与房子放在一起是否有意义。您会对关系数据库中的任何外键进行级联删除吗?如果是这样,那就意味着所有权。
弄清楚数据非规范化是否真的很重要
您将拥有分布在多个房屋中的代理机构(可能还有业主)详细信息。这有关系吗?
您的房屋收藏可能如下所示:
house: {
owner,
agency,
images[], // recommend references to GridFS here
reviews[] // you probably won't get too many of these for a single house
}
Run Code Online (Sandbox Code Playgroud)
*实际上,它可能是房屋的广告(因为房屋通常在房地产网站上做广告,这可能是您真正感兴趣的),所以只需考虑一下
| 归档时间: |
|
| 查看次数: |
3808 次 |
| 最近记录: |