2010-12-11 14 views
0

私は数多くの異なるエンティティを持つデータベースを持っており、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テーブルを必要としない、よりよい解決策がありますか?

+0

DBエンティティの異なるタイプが200種類ある場合は、NASAか設計全体が間違っています。この小さな詳細は、物事の壮大な計画では無関係です。 –

答えて

4

これまでに問題だったことは、あなたがEAVで解決しようとすると、今は2つの問題があります。

関連する問題