Могу ли я использовать NoSQL вместо реляционной базы данных? - PullRequest
1 голос
/ 15 апреля 2011

Для библиотеки мне нужно отслеживать пользователей и книги. По сути, мне нужно знать:

  • список книг, в данный момент заимствованных пользователем
  • текущий заемщик данной книги

Приложение выполняется с помощью 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 ]

2 голосов
/ 15 апреля 2011

В общем, mongodb будет хорошей заменой реляционной базы данных для вышеуказанной задачи.

Итак, некоторые основы:
1. Как только кто-нибудь возьмет книгу, вам просто нужно скопировать книгу во вложенную коллекцию пользователя и пользователя в Книгу.
2. Как только пользователь обновил свой профиль, вам также необходимо обновить информацию о пользователе в Книге.
3. Как только данные книги были изменены, вам также необходимо обновить информацию о книге внутри пользователя.
4. Если вы пытаетесь удалить какую-то книгу, и текущий заемщик существует, вы должны сказать, что книга была заимствована пользователем, а не удалять ее.

Я просто предлагаю добавить в вашу схему вместо current_borrower_email весь User объект -> current_borrower: UserSchema.

Так что с такой денормализованной схемой вы сможете легко показать (в пределах одного запроса к mongodb):

  • список книг, в данный момент заимствованных пользователем.
  • текущий заемщик данной книги
0 голосов
/ 03 февраля 2015

Это старый вопрос, но он появился первым в Google, так что ... Это не слишком сложно, но это слишком долго, чтобы подвести итог. Прочитай это: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...