背景
NodeJSの一般的なORMである SequelizeJS を使用してプロジェクトを構築しています。スキーマを設計するとき、2つの戦術があるように見えます:
私の理解では、#1はラピッドプロトタイピングには適していますが、#2は、時間の経過とともに進化し、運用データが移行に耐えられる必要があるプロジェクトのベストプラクティスです。
この質問は戦術#2に関係しています。
質問
私のテーブルには、外部キーを通じて反映される必要がある関係があります。
Sequelize QueryInterfaceを介して相互に外部キー関係を持つテーブルを作成するにはどうすればよいですか?
Sequelizeにはどの列とヘルパーテーブルが必要ですか?たとえば、createdAtやupdatedAtなどの特定の列が予想されるようです。
私は別のより手動の代替を提供したいので、手動の移行とqueryInterfaceを使用しているときに次の問題に遭遇しました:移行フォルダに2つのファイルがありました
migrations/create-project.js
migrations/create-projectType.js
project
には列projectTypeId
が含まれていたため、projectType
を参照していましたが、ファイルの順序が原因でまだ作成されておらず、エラーが発生していました。
両方のテーブルを作成した後、外部キー制約を追加して解決しました。私の場合、create-projectType.js
:
queryInterface.createTable('project_type', {
// table attributes ...
})
.then(() => queryInterface.addConstraint('project', ['projectTypeId'], {
type: 'FOREIGN KEY',
name: 'FK_projectType_project', // useful if using queryInterface.removeConstraint
references: {
table: 'project_type',
field: 'id',
},
onDelete: 'no action',
onUpdate: 'no action',
}))