Коллекции MongoDB: является ли избыточным (или плохой практикой) сохранение X в Y, а также Y в X? - PullRequest
0 голосов
/ 29 июня 2018

Автор имеет несколько статей. Статья всегда ровно одна автор.

Как бы я спроектировал это в mongodb?

Первый Я подумал, что могу просто встроить «статью» в качестве под-документа в «авторов». Но так как мне нужно собирать все статьи всех авторов довольно часто, я подумал, что это, возможно, не самое удачное решение.

Теперь Я думаю, что было бы лучше иметь две отдельные коллекции: «авторы» и «статьи». У автора будет несколько статей. Так что автору схемы хотелось бы такого:

const authorSchema = new Schema({
  email: { type: String, unique: true, lowercase: true},
  password: String,
  fname: String,
  lname: String,
  articles: [{
    type: Schema.Types.ObjectId,
    ref: "article"
  }]
})

У каждой статьи ровно один автор. Так это будет выглядеть так:

const articleSchema = new Schema({
  title: { type:String, unique: true },
  sentences: Array,
  image: String,
  tags: Array,
  word_count: Number,
  author: {
    type: Schema.Types.ObjectId,
    ref: "author"
  }
})

Вопрос: действительно ли это? Будут ли у меня проблемы с такого рода настройкой?

Меня беспокоит, что сохранение нескольких статей в author , а также сохранение author в каждом article является избыточностью, которую следует избегать или, по крайней мере, не считается очень хорошей практикой .

1 Ответ

0 голосов
/ 29 июня 2018

Первая мысль: вы правы, это не то, как схема должна быть разработана во многих случаях. Хотя здесь уже есть компромисс относительно того, когда следует разделить что-либо в новую коллекцию, и это часто зависит от шаблонов доступа, как вы уже указали, и характера отношений, в которых находятся коллекции.

Для вашего случая наиболее разумным выбором я считаю отдельные сборники для статьи и автора.

Для вашей текущей проблемы вы подумали о наиболее универсальном / общем методе ее реализации. Рассмотрим случай, когда вы пропускаете ссылку на автора в схеме статьи: если вы сейчас хотите, чтобы авторы конкретной статьи тратили много ресурсов на поиск по всем авторам и проверку, являются ли они авторами этой статьи, а не просто следуя ссылкам в статье.

Еще один момент заключается в том, что хранение некоторых ссылок не занимает много памяти, поэтому это не должно быть точкой разрушения, учитывая сегодняшнюю стоимость памяти ...

Ближе к проблеме: помните, однако, что ваша программа, обращающаяся к базе данных, должна поддерживать обе стороны отношений в базе данных, такой как mongodb, что делает программу немного более сложной.

Итак, в заключение, вы не должны беспокоиться о том, что хранение ссылок в обеих коллекциях является плохой практикой, даже для этого характерно ускорение определенных шаблонов доступа.

...