Mongodb: Должен ли я пойти на ссылочные отношения или встроенные отношения документов в огромном приложении с функциональностью, подобной eCommerce + CMS - PullRequest
0 голосов
/ 29 октября 2018

Задание

Один из моих клиентов должен создать сайт своей компании + встроенную электронную коммерцию, чтобы продавать свои продукты, перечисленные на странице продукта, вместе с панелью администратора с последующим стеком Angular 6, REST Api с Nodejs с использованием Express и mongoDd. Шаблон сайта: посмотрите структуру шаблона

Веб-сайт должен быть сделан таким образом, чтобы клиент мог изменять данные, отображаемые на веб-сайте, такие как изображения слайдера, каждый заголовок и каждый текст описания, фоновые изображения в баннере с панели инструментов. Также есть список товаров, корзина и онлайн-платежи как на сайте, так и на панели инструментов

Мой подход:

Создан угловой проект 6 с 3 модулями

  • Модуль просмотра, в котором есть компоненты, для которых обрабатываются такие страницы, как дома, о нас, решениях, поддержке, контактах, продуктах, карьере и т. Д.

  • Модуль панели инструментов: все компоненты, связанные с входом администратора и редактированием контента

  • Общий модуль: общие компоненты

Моя проблема с REST Api

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

например, одна из моих схем на странице поддержки выглядит следующим образом

const mongoose = require('mongoose');
const Schema = mongoose.Schema;


const regulatoryPartnerSchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    image: {
        type : String,
        required : true
    }
});

const supportLocationSchema = new Schema({
    title: {
        type: String,
        required: true,
    },
    email: {
        type : String,
        required : true
    }
});


//create a schema
const supportSchema = new Schema({
        contact: {
            title: {
                type: String,
                required: true,
                uppercase : true
            },
            description: {
                type : String,
                required : true
            },
            location: [ supportLocationSchema ]
        },
        certification_support: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            }
        },
        regulatory_partners: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            },
            partners: [regulatoryPartnerSchema]
        },
        solution_consulting: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            },
            solution_list: {
                type : [String],
                required : true
            }
        },

});



//create model
const SupportPage = mongoose.model('supportPage', supportSchema);

// export the model
module.exports = SupportPage;

Как видите, я создал схему для страницы поддержки со всеми данными на странице в одну схему со встроенными документами

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

Поскольку мне необходимо обновить эти данные с панели инструментов, я боюсь, что при использовании встроенного подхода возникнут проблемы при обновлении документа

Пожалуйста, помогите мне с вашими предложениями

Примечание: путаница при создании схемы характерна только для просмотра страниц, таких как Дом, о, контакты, решения, карьера и т. Д.

...