web-dev-qa-db-ja.com

一方向の1対多の関連付けを休止状態にします-結合テーブルの方が優れているのはなぜですか?

このドキュメントでは(単方向セクションまでスクロールしてください):

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

所有エンティティで外部キー列を使用するよりも、結合テーブルとの単方向の1対多の関連付けがはるかに好ましいと述べています。私の質問は、なぜそれがはるかに好ましいのですか?

32
UrLicht

所有エンティティタイプが別の親エンティティタイプによっても所有される可能性がある状況を考えてみます。所有テーブル内の両方の親テーブルへの外部キー参照を配置しますか? 3つの親タイプがある場合はどうなりますか?大規模なデザインには対応していません。

結合テーブルは結合を分離するため、所有されているテーブルは親テーブルを認識せず、デザインをエレガントに拡張できます。

38
skaffman

子エンティティに親タイプが1つしかない場合は、結合テーブルは必要ありません。私はこれをJPAで行いました(休止状態の実装を使用)。

利点:テーブルが1つ少なくなります。おそらくより良いパフォーマンス。 「この表は何のためのものですか?」タイプの質問。

短所:OOの観点から見ると、子と親の間に追加の依存関係が導入されています。実際には、これはそれほど大きな問題ではありません。子の関係がプライベートであるためです。

例えば。 
 parent:
 @ OneToMany(mappedBy = "parent"、cascade = CascadeType.ALL)
 @ MapKey(name = "name")
 private Map children; 
 
 child:
 @ ManyToOne(optional = false)
 private Parent parent; 
11
Conor