MongoDB:用户和事件的嵌入式或规范化数据模型

标签 mongodb database-design model database

我正在为一个新项目设计我的数据库模型,因为我来自 SQL 世界,所以我不确定哪种方法更好。

这是我的主要关系:

  • 用户组织的事件。 (例如:约翰正在组织一场足球赛 游戏)
  • 加入事件的用户。 (例如:安娜和罗布参加了约翰组织的足球比赛)
  • 事件属于类别/ActivityType(约翰的游戏属于足球类别)
  • 用户在完成事件后对其他用户进行评分(例如:John 对 Anna 的表现给予 5 星评分,对 Rob 给予 5 星评分 在足球比赛期间)。

伪代码应该是这样的:

  1. 用户

    • _id
    • 全名
    • 电子邮件
    • 密码
    • loc ({ lon: X, lat: Y })
    • 事件(事件数组)
    • 平均比率
    • 创建于
    • 更新时间
  2. 评分

    • _id
    • 时间戳
    • 事件(事件)
    • rater_user(用户)
    • rated_user(用户)
    • 创建于
    • 更新时间
  3. 事件类型

    • _id
    • 姓名
    • 半径
  4. 事件

    • _id
    • 类型(事件类型)
    • 组织者(用户)
    • loc ({ lon: X, lat: Y })
    • 地址
    • 时间
    • 最大参与者数
    • 描述
    • 参与者(用户数组)
    • 请求(用户数组)
    • 创建于
    • 更新时间

我应该从这种规范化方法转向嵌入式数据模型吗?

最佳答案

这是我写的关于在 mongodb 中嵌入或引用的答案。强烈推荐。

MongoDB for BI use

嵌入更适合:

  • Small subdocuments
  • Data that does not change regularly
  • When eventual consistency is acceptable
  • Document that grow by a small amount
  • Data that you'll often need to perform asecond query to fetch
  • Fast reading speed

引用更适合

  • Large subdocuments
  • Volatile data
  • When immediate consistency is necessary
  • Document grow with a large amount
  • Data that you often exclude from document
  • Fast write speed

-摘自《Mongodb权威指南》

关于MongoDB:用户和事件的嵌入式或规范化数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414844/

相关文章:

mysql - InnoDB vs MyISAM 用于小表 WordPress 博客

mysql - MySQL数据库的正确设计

objective-c - 我可以通过映射模型从 CoreData 中的关系中删除对象吗?

php - 哪些代码应该放在 MVC 结构中的什么地方

mongodb - 从数据库按时间间隔调度任务的最佳方法

javascript - MongoDB init-script 未使用 docker-compose 启动

sql - 为什么在PostgreSQL中创建生成的列时出现错误?

php - 检查 Laravel 5.5 模型事件中的属性是否已更改

java - 具有超过10个参数的Spring Data Mongo

MongoDB 读取性能差