从SQL到Mongo的设计DB的方式

时间:2014-02-17 12:41:07

标签: sql mongodb

我想了解如何解决Mongo上的某些问题,我一直在使用SQL一段时间,我知道数据库设计的基础知识,其中许多在Mongo中都没用,因为它们完全不同。

这是一个例子。我有用户凭据(用户名,密码),用户信息(姓名,姓氏,...)和用户Facebook信息(朋友列表,喜欢,ecc)。在MySQL中,组织的一个好方法是在3个表中,一个用于凭证,一个用于一般用户信息,一个用于fb用户信息,所有3个用户ID相关。这样,如果我需要登录用户,我需要查询具有非常轻的行(3列; id,用户名,密码)的凭证表。

那么,这个论点如何被转化为非关系领域?我是否通过将常规信息和facebook信息添加为数组来扩展我的用户对象?:

user =>array(
              'username' => 'user1', 
              'password' => 'pass1',
              'gInfo'    => array('name' => '','lastname' => ''),
              'fbInfo'   => array('likes' => '','friends' => '')
)

或者在SQL中,如果我创建了两个与用户的Mongo _ID相关的新对象,那就更好了。

1 个答案:

答案 0 :(得分:0)

所以这是你的真实案例。

“我所谓的'关系'是否超过每个用户合理数量的'记录',并且将这些信息保存在单独的”关系“商店中是否有意义?”

因此,如果您的回答是,那么您就是使用MongoDB“embedded document”表单的好人选。答案的一部分可能源于“我总是这样做,因为他们告诉我”。

为什么MongoDB存在的一半原因是提供了一种替代建模的方法,“第二范式”,“第三范式”语义,在这种对使用模式有意义的情况下和存储要求。一般来说,文档嵌入的概念存在于避免需要从另一个集合获取“相关”结果,因为结果已经嵌入在回复文件中。

拥有不同的Id会更好吗?你的意思是在不同的集合。 MongoDB 的地方 不做联接。然后案件可能不会,但如果你需要它,那么考虑后果。

正如明智的绝地所说,“忘掉,你所学到的东西”。并且将不同的思维方式应用于您的架构设计,MongoDB将很适合您。

祝你好运Padawan。