私は解決したいと思っている縁のケースを得ました。MySQL ::エッジケース::混合型外部キー::可能か夢見るのか?
他の統計情報の中でも、ノンリーグ/非ロスタスの相手を含むかもしれないボックススコアの結果を記録するスポーツレポートを掲載します。これにより私は、Fooの対戦相手が私たちのシステムでは名簿を持っていない(彼らもそうでない)場合があることを意味します。
敵のチームの統計情報を単純に省略するのではなく、所有者は以前から、プレーヤー名の入力を許可するオプションを組み込んでいることを以前に要求していました(既存の名簿のプレーヤー名のドロップダウンリストから[playerID] )。したがって、私たちの名簿テーブルにはint型のplayerID PKカラムがありますが、私たちの統計テーブル(犯行&防衛)にはvarcharのplayerIDカラムがあります。
これにより、チーム名簿が存在するかどうかにかかわらず、(私たちは単純にプレーヤの名前としてvarchar statテーブルのplayerIDを表示していない場合)ロスタテーブルに対して外部結合を行い、一致レコードを取得できます。ハッキングされていますが、仕事をしています。
結果テーブルにFKがあるので、ゲーム結果が削除されると関連する統計情報も表示されます。しかし、重要な制約がありません:ロスタ>>統計。 playerIDの列のタイプが一致しないため、FKを追加できません。制約の隙間を埋める必要があります(つまり、選手を名簿から削除すると、すべての統計情報が孤立してしまいます)。
この問題を解決する方法の候補はありますか?
強制的にカスケード削除を実行するには、トリガを使用します。 –
+1 @Denis、yes、またはミドルウェア層でそれを処理します。しかし、ORMに統合しようとすると、ミドルウェアで制約を定義してMySQLで適用できるようになることが期待されていました。 – virtualeyes
私はそのためにトリガを使用したいと思います。または、必要に応じてモデルを中間テーブルで少し修正してください。 –