MongoD和关系型数据库相关概念的对应

MongoDB(NoSQL)中,文档(Document)、集合(Collection)等概念与 关系型数据库(RDBMS) 的表、行等概念有一定的对应关系。可以用下面的表格来对比它们的概念:

MongoDB(NoSQL) 关系型数据库(RDBMS) 解释
数据库(Database) 数据库(Database) 一个存储数据的整体,包含多个集合(表)
集合(Collection) 表(Table) 由多个文档组成的集合,类似于表,但无固定模式(Schema-less)
文档(Document) 行(Row) 单条数据,存储为 BSON(类似 JSON),在 RDBMS 中是行
字段(Field) 列(Column) 文档中的键值对(Key-Value),类似于关系数据库中的列
索引(Index) 索引(Index) 提高查询速度,类似于 RDBMS 的索引
嵌套文档(Embedded Document) 表关联(Join) 在文档中嵌套子文档,相当于 RDBMS 中的外键表,但不需要 Join
主键 _id(ObjectId) 主键(Primary Key) _id 字段是默认的唯一标识,类似于关系型数据库中的主键
引用(Reference) 外键(Foreign Key) 在一个文档中存储另一个文档的 _id,类似于外键关系

举例说明

关系型数据库(MySQL)

假设有两个表:users(用户表) 和 orders(订单表),它们通过 user_id 关联:

users
id (PK) name email
1 Tom [email protected]
2 Jerry [email protected]
orders
id (PK) user_id (FK) product
101 1 Laptop
102 2 Smartphone

在查询某个用户的订单时,我们通常使用 JOIN

SELECT users.name, orders.product 
FROM users
JOIN orders ON users.id = orders.user_id;

在 MongoDB 中

MongoDB 使用 文档 代替行,嵌套文档 代替外键关系:

嵌套文档方式
{
    
    
    "_id": ObjectId("6501a23b1a2b3c4d5e6f7890"),
    "name": "Tom",
    "email": "[email protected]",
    "orders": [
        {
    
     "order_id": 101, "product": "Laptop" },
        {
    
     "order_id": 102, "product": "Smartphone" }
    ]
}

查询某个用户的订单非常方便:

db.users.find({
    
     name: "Tom" });

优点:

  • 查询时不需要 JOIN,速度更快。
  • 数据读取方便,直接获取用户及其订单信息。

缺点:

  • 适用于数据更新较少的情况,如果订单信息需要频繁修改,嵌套文档可能会导致冗余数据。

引用(Reference)方式

如果订单较多,可以存储 user_id 进行引用:

{
    
    
    "_id": ObjectId("6501a23b1a2b3c4d5e6f7890"),
    "name": "Tom",
    "email": "[email protected]"
}
{
    
    
    "_id": ObjectId("7601b45c2d3e4f5g6h7i8901"),
    "user_id": ObjectId("6501a23b1a2b3c4d5e6f7890"),
    "product": "Laptop"
}

查询时类似 SQL 需要 $lookup

db.users.aggregate([
    {
    
    
        $lookup: {
    
    
            from: "orders",
            localField: "_id",
            foreignField: "user_id",
            as: "orders"
        }
    }
]);

适用场景:

  • 适用于 订单数据量很大,但用户信息不会频繁更新的情况。

总结

场景 MongoDB 方案 关系型数据库 方案
小型数据、少量关系 嵌套文档 一张表或简单关联
数据较大、查询性能重要 嵌套文档或索引引用 索引优化的 JOIN
数据分布广泛、需要灵活查询 引用 + $lookup 标准外键表设计

MongoDB 的 嵌套文档 让读取速度更快,但 引用方式 更适合大规模数据。

猜你喜欢

转载自blog.csdn.net/zybsjn/article/details/146160527