MongoDB数据建模
MongoDB中的数据在同一集合中具有灵活的schema.documents。它们不需要具有相同的字段集或结构,而集合文档中的通用字段可以保存不同类型的数据。
数据模型设计
MongoDB提供两种类型的数据模型:—嵌入式数据模型和规范化数据模型。根据要求,你可以在准备文档时使用任何一个模型。
嵌入式数据模型
在此模型中,你可以将所有相关数据(嵌入)在单个文档中,这也称为非规范化数据模型。
例如,假设我们在三个不同的文档(Personal_details,Contact和,Address)中获取员工的详细信息,则可以将所有三个文档嵌入到一个文档中,如下所示:
{ _id: , Emp_ID: "10025AE336" Personal_details:{ First_Name: "Radhika", Last_Name: "Sharma", Date_Of_Birth: "1995-09-26" }, Contact: { e-mail: "radhika_sharma.123@gmail.com", phone: "9848022338" }, Address: { city: "Hyderabad", Area: "Madapur", State: "Telangana" } }
标准化数据模型
在此模型中,你可以使用引用来引用原始文档中的子文档。例如,你可以将以下文档以规范化模型重写为:
员工:
{ _id: <ObjectId101>, Emp_ID: "10025AE336" }
个人资料:
{ _id: <ObjectId102>, empDocID: " ObjectId101", First_Name: "Radhika", Last_Name: "Sharma", Date_Of_Birth: "1995-09-26" }
联系方式:
{ _id: <ObjectId103>, empDocID: " ObjectId101", e-mail: "radhika_sharma.123@gmail.com", phone: "9848022338" }
地址:
{ _id: <ObjectId104>, empDocID: " ObjectId101", city: "Hyderabad", Area: "Madapur", State: "Telangana" }
在MongoDB中设计架构时的注意事项
根据用户要求设计架构。
如果将它们一起使用,则将它们组合到一个文档中。否则,将它们分开(但请确保不需要连接)。
复制数据(但数量有限),因为与计算时间相比,磁盘空间便宜。
在写入时进行连接,而不是在读取时进行。
针对最常见的用例优化架构。
在架构中进行复杂的聚合。
例子
假设客户需要为其博客/网站进行数据库设计,并查看RDBMS和MongoDB模式设计之间的区别。网站具有以下要求。
每个帖子都有唯一的标题,描述和网址。
每个帖子可以有一个或多个标签。
每个帖子都有其发布者的名称和喜欢的总数。
每个帖子都有用户提供的评论,以及他们的姓名,消息,数据时间和喜欢。
在每个帖子上,可以有零个或多个评论。
在RDBMS架构中,用于上述要求的设计将至少具有三个表。
在MongoDB模式中,设计将具有一个收集帖子和以下结构:
{ _id: POST_ID title: TITLE_OF_POST, description: POST_DESCRIPTION, by: POST_BY, url: URL_OF_POST, tags: [TAG1, TAG2, TAG3], likes: TOTAL_LIKES, comments: [ { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES }, { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES } ] }
因此,在显示数据时,在RDBMS中,你需要连接三个表,而在MongoDB中,数据将仅从一个集合中显示。