5

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

  1. 2 つのテーブル (PostLike と TopicLike) の代わりに、いいねの「1 つの大きなテーブル」を取得します。
  2. このテーブルには、レコードの識別 (つまり、like のタイプ) を可能にするdtypeと呼ばれる追加の列があります。長期的には、ディスク容量を大量に浪費する可能性があります。ではない?

私は DB の専門家ではありません。そのため、このデータベースの設計と、これら 2 つの問題が重大であるかどうかについての洞察を得たいと思いました。

4

1 に答える 1

7

テーブルが 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" アイテムの場合、"topic" 値は NULL になります。

しかし、最近では、実際の問題ではないにしても、ディスク容量が問題になっています。

単一テーブルの継承で見られる唯一の欠点は、多くのプロパティがある場合に列の数が膨大になる可能性があることです。また、モデルに新しいプロパティ/列を追加するのが難しくなります (DB の進化を適用する必要がある場合)。 .

また、知る限り、eBean は「単一テーブルの継承」のみをサポートしています。

于 2012-09-30T13:08:16.110 に答える