无法 运行 回滚迁移,因为其他对象依赖于它

Can't run rollback migration because other objects depends on it

我在迁移方面苦苦挣扎了一段时间,实际上我不知道如何解决它。我想这是我缺乏数据库经验,但当我有 .onDelete('CASCADE') 时无法理解问题出在哪里。所以我在我的项目中使用 postgresql 和 knex。 2 tables 一切都很好,回滚工作正常,直到我创建了额外的 table(balance)。我不能再 运行 迁移了,我理解这个错误,但实际上不知道如何解决它。每当我 运行ning 'npx knex migrate:rollback' 时,我都会收到错误消息:“迁移失败,出现错误:drop table “钱包”- 不能删除 table 钱包,因为其他对象依赖于它"

看来我被 FK 链卡住了,不确定像我这样做是不是一个好习惯,但如果您有任何见解 - 请告诉我!

正如我提到的,我现在有 3 tables。

20220328091102_users

exports.up = function (knex) {
    return knex.schema.createTable('users', table => {
        table.increments('user_id').primary();
        table.string('username').unique().notNullable();
        table.string('password').notNullable();
        table.timestamp('created_at').defaultTo(knex.fn.now());
    });
};

exports.down = function (knex) {
    return knex.schema.dropTable('users');
};

20220328181130_wallet

exports.up = function (knex) {
    return knex.schema.createTable('wallet', table => {
        table.increments('wallet_id').primary();
        table.integer('user_id').unsigned();
        table.foreign('user_id').references('user_id').inTable('users').onDelete('CASCADE');
        table.string('wallet_name').notNullable();
        table.timestamp('created_at').defaultTo(knex.fn.now());
    });
};
exports.down = function (knex) {
    return knex.schema.dropTable('wallet');
};

20220328181625_balance

exports.up = function (knex) {
    return knex.schema.createTable('balance', table => {
        table.increments('balance_id').primary();
        table.integer('wallet_id').unsigned();
        table.foreign('wallet_id').references('wallet_id').inTable('wallet').onDelete('CASCADE');
        table.string('action').enum(['increase', 'decrease']).defaultTo(null);
        table.integer('amount').defaultTo(null);
        table.integer('total_balance_new').notNullable();
        table.integer('total_balance_previous').notNullable();
        table.timestamp('updated_at').defaultTo(knex.fn.now());
        table.timestamp('created_at').defaultTo(knex.fn.now());
    });
};
exports.down = function (knex) {
    return knex.schema.dropTable('wallet');
};

所以,我无法回答为什么将 table 与 return knex.schema.dropTable('table_name') 一起删除会发生错误,但在这种情况下与 return knex.raw('DROP TABLE table_name CASCADE'); 完美配合。