我可以使用NoSQL而不是关系数据库吗?

时间:2011-04-15 07:20:34

标签: mongodb nosql

对于图书馆,我需要跟踪用户和图书。基本上我需要知道:

  • 用户当前借阅的图书清单
  • 给定图书的当前借款人

应用程序使用node.js和mongoDB(使用moogoose)完成。我有以下架构:

BookSchema = new Schema({
  title        : String,
  author : String,
  current_borrower_email: String,
});
mongoose.model('Book', BookSchema);

// Define User model
UserSchema = new Schema({
  lastname  : String,
  firstname  : String,
  email     : String,
  books    : [BookSchema]  // Books the user is borrowing
});
mongoose.model('User', UserSchema);

我想在关系数据库中设置它会更简单,我可以很容易地使用多个关系附带外键,但我想尝试一下MongoDB。

这个解决方案能起作用吗?另外,如果我删除一个Book对象,似乎我必须从借用它的用户的数组中手动​​删除它,它是吗?

2 个答案:

答案 0 :(得分:2)

一般情况下,mongodb可以很好地替代上述任务的关系数据库。

所以一些基础知识:
1.只有一个人拿一本书你才需要将书籍复制到用户和用户的嵌套集合中 2.一旦用户更新了他的个人资料,您需要在书中更新有关用户的信息 3.一旦书籍数据发生变化,您还需要在用户内更新有关书籍的信息 4.如果您试图删除某本书并且当前借款人存在,您应该说该书是由“用户”借用而不是删除它。

我建议您添加到您的架构中,而不是current_borrower_email整个User对象 - > current_borrower: UserSchema

因此,使用这种非规范化架构,您可以轻松显示(在一个mongodb请求中):

  • 用户当前借阅的图书清单。
  • 给定图书的当前借款人

答案 1 :(得分:0)

这是一个老问题,但它首先出现在谷歌... 它不是太复杂,但总结太长了。 读这个: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1