私はアプリケーションを実装しようとしています。このアプリケーションでは、私はエンティティ名のコメント、答え、質問があります。質問、回答、コメントにコメントがあるので、Commentableクラスを作成し、3つのクラスすべてをCommentableに拡張できます。このコメント可能なクラスではSetを保持していますが、この構造のパフォーマンスは不思議です。なぜなら、コメントを得るためには常に結合クエリを作成するからです。 commentedObjectId = idのような別のテーブルでコメントを作成する必要があるときに、commentedObjectIdを持つ別々のコメントエンティティを作成するとどうなりますか?より小さい結合操作のためにSet <Entity>ではなくエンティティIDのみを保持することをお勧めしますか?
class Answer extends Commentable{}
class Comment extends Commentable{}
class Question extends Commentable{}
class Commentable extends BaseModel{
@OneToMany
Set<Comment> comments;
public Set<Comments> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}`
これは、結合操作を避けるための代替方法です。私はそのようなデータベースを非正規化すべきですか?
class Comment extends BaseModel {
String commentedObjectId;
public String getcommentedObjectId() {
return commentedObjectId;
}
public void setcommentedObjectId(String commentedObjectId) {
this.commentedObjectId = commentedObjectId;
}
}
は、あなたの速い返事ありがとうございますが、コメントをフェッチするときには、再びクエリに参加いたします。私は何百万人もの質問と何百万人ものコメントをしています。この結合クエリの実行方法 – ilkerbfl
まだそれは結合SQLを行う、焦点ポイントです。私はパフォーマンスのために非正規化を行う方がいいですか? – ilkerbfl