sql >> データベース >  >> RDS >> PostgreSQL

hasMany、belongsTo、またはその両方を続編しますか?

    belongsToの使用 関連するモデルの所有権を定義します。これをより詳細に説明するために、チュートリアルから引用された例を参照します

    Project.hasMany(Task);
    Task.belongsTo(Project);
    

    削除されたプロジェクトのタスクに関心がなくなったと想定します。その場合、belongsToを定義していなければ、タスクを手動で削除する必要があります。 協会。 belongsTo タスクに対するプロジェクトの所有権を確立し、データベースは削除されたプロジェクトに属するタスクも自動的に削除します。これはcascading deleteと呼ばれます 複数のテーブルにチェーンできます。

    次のコードスニペットを実行した場合

    const Project = sequelize.define('project', {
        name: Sequelize.STRING
    });
    const Task =  sequelize.define('task', {
        name: Sequelize.STRING
    });
    Project.hasMany(Task);
    Task.belongsTo(Project);
    

    続編のスクリプトで出力を確認します

    Executing (default): DROP TABLE IF EXISTS `projects`;
    Executing (default): CREATE TABLE IF NOT EXISTS `projects` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
    Executing (default): PRAGMA INDEX_LIST(`projects`)
    Executing (default): DROP TABLE IF EXISTS `tasks`;
    Executing (default): CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `projectId` INTEGER REFERENCES `projects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);
    

    タスクテーブルの作成時にカスケード動作が設定されていることに気付くでしょう。

    言われているように、最終的な答えは次のとおりです。それは状況によって異なります。 belongsToの使用 削除されたプロジェクトのタスクを保持したい場合は、非常に便利になるか、致命的となる可能性があります。 belongsToのみを使用してください アプリケーションのコンテキストで意味がある場合。




    1. 最後の連続した行を見つける

    2. データベース''へのユーザー''@'localhost'のmysqlアクセスが拒否されました

    3. ETLプロセスでのPythonとMySQLの使用

    4. Ajax使用時のMySQLエラーの処理