Javascript SEQUELIZE:Sync({alter:true})有没有办法使我的关联表的数据保持一致?

Javascript SEQUELIZE:Sync({alter:true})有没有办法使我的关联表的数据保持一致?,javascript,node.js,sqlite,express,sequelize.js,Javascript,Node.js,Sqlite,Express,Sequelize.js,谢谢你提前阅读 我目前正在使用SEQUELIZE和NODEJS开发一个应用程序 我想说的是,两个模型在分开的文件中,它们之间的关联如下: 文件1: const Sequelize = require("sequelize"); const db = require("../db"); const Project = db.define("project", { name: { type: Sequelize.STRING, allowNull: false, uni

谢谢你提前阅读

我目前正在使用SEQUELIZE和NODEJS开发一个应用程序

我想说的是,两个模型在分开的文件中,它们之间的关联如下:

文件1:

const Sequelize = require("sequelize");
const db = require("../db");

const Project = db.define("project", {
  name: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  },
  content: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  }
});
Project.prototype.associate = (models) => {
    Project.hasMany(models.User);
};
module.exports = Project;
文件2:

const Sequelize = require("sequelize");
const db = require("../db");

const User = db.define("user", {
  username: {
    type: Sequelize.STRING,
    unique: true,
    allowNull: false
  },
  password: {
    type: Sequelize.STRING,
    unique: true,
    allowNull: false
  },
});
User.prototype.associate = (models) => {
    User.belongsTo(models.Project);
};
module.exports = User;
我正在导入这些文件并创建数据库的连接和同步(),如下所示:

const domainsPath = path.join(__dirname, '../../domains');

        //dataBaseConnection is an instance of Sequelize
        fs.readdirSync(domainsPath).forEach(domainFileName => {
            const domain = dataBaseConnection.import(path.join(domainsPath, domainFileName));
            //just adding the objects to a parent return object(dataBase.domains) to use the models later
            dataBase.domains[domain.name] = domain;
        });

        //Executing the associations. I've already tested it, It loads first the Project and then the User
        Object.keys(dataBase.domains).forEach(key => {
            if (dataBase.domains[key].prototype.hasOwnProperty('associate')) {
                dataBase.domains[key].prototype.associate(dataBase.domains);
            }
        });

        //connection Database Sync
        dataBaseConnection.sync({ alter: true}).done((result) => {
            console.log(`${logsColors.FgGreen} DataBase Conected!!!`);
        });
如你所见。。。我已经设置了{Alter:true}选项配置,因为我仍处于开发阶段

因此,默认情况下,我的关系有一个onDelete='SET NULL',当nodemon重新启动我的服务器时。。。
alter:true
删除源表,并在我的projectId字段上设置null

当然,如果我有机会将onDelete“级联”,它只会删除所有相关的注册表

有没有办法避免这种情况


最好的,

你考虑过显式迁移而不是调用同步吗?@Anatoly我考虑过,但由于我仍在学习sequelize,我想保持这种方式。。。所以我可以开发和建立我所有的最终模型和数据。。。然后我可能会转向迁移。迁移是避免此类问题的快速方法吗?迁移使您能够控制模型所需的所有数据库修改。首先,您可以同步初始结构,将最终结构作为脚本从数据库中提取出来,在出现迁移后,您可以应用它们。另一个优势是能够拥有不同版本的应用程序和数据库结构。@Anatoly非常感谢!!!我会记住的!同时,你知道我要问的问题的解决方案吗?文档中提到同步:“删除模型中已删除或类型已更改的列中的数据”。你是否考虑过显式迁移而不是调用同步?@Anatoly我知道,但我仍在学习sequelize,我希望保持这种方式。。。所以我可以开发和建立我所有的最终模型和数据。。。然后我可能会转向迁移。迁移是避免此类问题的快速方法吗?迁移使您能够控制模型所需的所有数据库修改。首先,您可以同步初始结构,将最终结构作为脚本从数据库中提取出来,在出现迁移后,您可以应用它们。另一个优势是能够拥有不同版本的应用程序和数据库结构。@Anatoly非常感谢!!!我会记住的!同时,你知道我要问的问题的解决方案吗?文档中提到了同步:“删除模型中已删除或类型已更改的列中的数据”。