私は数多くの異なるエンティティを持つデータベースを持っており、N * Mの多対多テーブルを作成したり、可能なすべての参照エンティティをカバーするために多数の外部キー列を追加することなく、EAVのような可変外部キーref_type/ref_id:悪いデザイン?
リファレンスはref_type(string/varchar)とref_id(int)を表す列を作成し、それをEAV形式で使用して他のエンティティを指すようにしました。 ref_typeは参照されるエンティティの名前を保持し、ref_idはエンティティのID(外部キーのような)を保持します。
私はFooのエンティティのためのテーブルを持っていたし、バーやバズの実体を参照したい場合たとえば、それは次のようになります。
foo_id foo_name ref_type ref_id
------ -------- -------- ------
1 aaa bar 352
2 bbb baz 937
3 ccc bar 522
を、私は、これは持っているだろう達成するために、より伝統的な方法を知っていますbar_idおよびbaz_idをfooテーブルの専用の外部キー列として使用するか、関係を表す専用のfoo_to_bazおよびfoo_to_barテーブルを持つことができます。 2つの可能な参照されたエンティティだけでは、これらの通常のオプションはそれほど悪くはありませんが、20または200の可能なエンティティがあれば、実用的ではないようです。
このパターンには特定の名前がありますか?それともエンティティ属性値(EAV)に該当するのでしょうか?
これは「悪い」データベース設計と考えられますか?もしそうなら、多くの外部キー列やX_to_Yテーブルを必要としない、よりよい解決策がありますか?
DBエンティティの異なるタイプが200種類ある場合は、NASAか設計全体が間違っています。この小さな詳細は、物事の壮大な計画では無関係です。 –