質問

もちろんOOPに関する考慮事項のためにsingle table inheritanceの概念を使用しています。
たとえば、PostLikeTopicLikeLikeクラスから継承します。
この方法論に関する2つの問題があります:

  1. 2つのテーブルの代わりに(郵便局とトピックのような)私は「1つの大きなテーブル」を得ます。
  2. このテーブルには、レコード識別を可能にする dtype という追加の列があります(すなわち、様子)。長期的には、ディスク容量の巨大な廃棄物である可能性があります。そうでないですか?

    私はDBエキスパートではなく、このデータベースのデザインについての洞察を得たいと思っていたので、これらの2つの問題が重要であるかどうか。

役に立ちましたか?

解決

2つの代わりにテーブルが1つしかない場合は、「結合」を避けるため、読み取り値は速くなります。 しかし、追加の "dtype"列といくつかの空の列があるので、あなたはより多くのスペースを使います。

例を取得しましょう。これがモデルです(JPAアノテーションなし):

public abstract class Like {
    public Long id;

    public String foo;
}

public class PostLike extends Like {

    public String post;
}


public class TopicLike extends Like {

    public String topic;
}
.

テーブルLike

----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post  |  1 |   a |  NULL |   p1 |
|topic |  2 |   b |    t1 | NULL |
----------------------------------
.

とわかるように、「Postlike」項目の場合は、「トピック」の値がヌルです。

今日では、本当の問題でなければディスク容量。

単一のテーブルの継承で見る唯一の欠陥は、プロパティが多い場合は巨大になる可能性がある列の数で、モデルに新しいプロパティ/列を追加するのが難しい(適用する必要がある場合DB進化)

とafaik、 EBeanは「単一のテーブルの継承」をサポートしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top