Мы планируем построить продукт на основе SaaS, поэтому, главным образом после большого поиска, мы обнаружили, что для разработки продукта SaaS существует три подхода к базе данных.
Поэтому мы планируем перейти к варианту 2,
Поэтому изначально мы используем Mysql, но мы не нашли, как получить несколько схем в mysql, мы используем Sequelize как ORM.
После большого количества поисковых запросов мы обнаружили, что много продуктов на основе многопользовательских сайтов используют postgresql для мощного подхода к схеме, поэтому мы попробовали эту библиотеку:
https://github.com/westmark/sequelize-multi-tenant-enhancer
Мы попробовали эту библиотеку для множественного подхода на основе схемы, но данные не отображаются в соответствии с арендатором. Также я открыл проблему в github,
Поэтому, если у вас есть какие-либо идеи или какая-либо должность, которая поможет мне построить продукт SaaS, помогите мне
ПРИМЕЧАНИЕ. Мой стек: Узел + Экспресс + Угловой + Mysql или Postgres
Мой вопрос: как использовать несколько схем в postgres?
Наконец, я решил использовать вариант 2, и я перешел в Postgresql вместо mysql, потому что Postgresql имеет подход на основе схемы!
Теперь мой последний код:
const postgresDB = new Sequelize('postgres://localhost:5432/test_enduser');
postgresDB.authenticate().then((err) => {
if (err) {
console.log('There is connection in ERROR.');
} else {
console.log('Postgres Connection has been established successfully');
}
});
postgresDB.define('inventory', {
name: Sequelize.STRING,
});
const createSchema = () => {
Business.findAll({
raw: true,
}).then((data) => {
data.forEach((client) => {
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
});
// new schema is created
console.log('Postgres schema created');
}).catch((err) => {
console.log(err.message);
});
});
});
};
createSchema();
// apis
exports.getAllBusiness = (req, res) => {
postgresDB.models.inventory.schema(req.user.code).findAll()
.then((results) => {
res.send(results);
});
};
exports.postBusiness = (req, res) => {
const user = {
name: req.body.name,
};
postgresDB.models.inventory.schema(req.user.code).create(user)
.then(data => res.status(200).send(data))
.catch(Sequelize.ValidationError, err => res.status(422).send(err.errors[0].message))
.catch(err => res.status(400).send(err.message));
};
Я устанавливаю соединение postgres
Просто для теста я создаю таблицу под названием "инвентарь",
В моем приложении он пришел в систему, и он подписался, в то время как я регистрирую там Business Code в моей таблице Business (таблица Business, поступающая из отдельной базы данных, которая представляет собой супер-основное приложение DB), поэтому я нахожу бизнес-код и цикл и создавать динамические схемы в postgres
Теперь см. Мой api, я делаю CRUD на основе req.user.code (из сеанса входа в систему), и я, наконец, сопоставляю данные с данными в соответствии с конкретными схемами,
Итак, наконец, у меня есть чистые отдельные схемы для каждого клиента
Спасибо!