2017-02-25 11 views
0

Sequelizeを使用してアスリートと組織の間に複数のテーブルがある場合、アスリートが組織に属しているかどうかを確認できるようにしたいと考えています。これは可能ですか?あるいは、私はアスリートのクラスに関連付けを拡張する必要がありますか?例えばノードSequelize複数のテーブルを経由する場所

、私はあなたが見ることができるように、アスリートが最高の組織に...部門に属しているチーム、などに属し enter image description here

下図のような構造を有しています。

Sequelizeを使用してノード/ mysqlデータベースを実行しています。私は間接的な関係が特定の直接の関係を通じて見つけられることを示すために "スルー"を使用することができるレール上でルビーを使いましたが、belongsTo関係でSequelizeのようなものは見つかりませんでした。

これを解決する方法があるとしても、私はこれらのすべてのテーブルに後編が加わると推測しています。これは高額になります。おそらく、組織を他の一連のクラスにリンクするのではなく、アスリートに直接関連させるのが最善でしょうか?

ありがとうございました。

答えて

1

Sequelizeでは、belongsToのネストをクエリに含めることができます。あなたの場合、それは次のようになります:

Athlete.find({ 
    include: [ 
     { 
      model: Team, 
      include: [ 
       model: Division, 
       include: [ 
        model: AgeGroup, 
        include: [ 
         model: League, 
         include: [ 
          model: Season, 
          include: [ 
           model: Organisation, 

          ] 
         ] 
        ] 
       ] 
      ] 
     } 
    ] 
}); 

これはかなり醜いですが、必ずしも問題ではありません。最初に行うことは、パフォーマンスを問題にするかどうかを確認することです。あらゆるチャンスがあります。

パフォーマンスが問題で、すべてのデータベースインデックスとアイテムが適切なパフォーマンスを得ることができない場合は、yes、アスリートにorganisation_idを直接追加しても問題ありません。これは「非正規化」と呼ばれ、冗長データを格納して読み取りパフォーマンスを最適化します。あなたができるところでは避けなければならないものですが、それを避けることができない場合は問題ありません。

アスリートのteam_idを変更するときには、organisation_idも更新する必要があります。

+0

私はこの方向に行くことはありませんでしたが、答えは私が行くことを終えた方向を知らせる助けとなりました。ありがとうございました – user3331142

関連する問題