Я вижу в вашем репозитории Github, что вы структурировали свои модели, как в реляционной базе данных (примечание: вы назвали реляционную базу данных «базой данных SQL» по вашему вопросу) с нормализованными моделями данных :
Пример: в Topic.js вы ссылаетесь на сообщения со ссылкой:
posts: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post',
},
],
Это, безусловно, работает так же, но с NoSQL и особенно с MongoDB у вас есть возможность встроить документы в другой документ.
Почему бы не встраивать схему сообщений непосредственно в тему, как это:
posts: [
{
title: {
type: String,
required: true,
},
body: {
type: String,
required: true,
},
...
upvotes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
],
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Comment',
},
],
},
],
Как я понимаю, если тема удалена, все сообщения, связанные с этой темой, должны быть удалены.
Со встроенной схемой у вас есть только одно удаление.
Я не знаю, является ли в вашем контексте встроенное решение лучшим решением (из-за perfs), но у вас есть два решения:
- Используйте другую схему (файлы моделей), и вы должны вручную удалить ее в каскадном режиме (например: при удалении темы вы должны найти все ссылки на сообщения в теме a).и удалите их ...)
- Рефакторинг и вставка: удаление темы также удаляет комментарии.
См. Официальные документы mongodb для получения дополнительной информации о встроенной схеме: https://docs.mongodb.com/manual/core/data-model-design/