単一テーブルの継承(EBean + PLAY!フレームワーク)
-
11-12-2019 - |
質問
もちろんOOPに関する考慮事項のためにsingle table inheritance
の概念を使用しています。
たとえば、PostLike
とTopicLike
はLike
クラスから継承します。
この方法論に関する2つの問題があります:
- 2つのテーブルの代わりに(郵便局とトピックのような)私は「1つの大きなテーブル」を得ます。
- このテーブルには、レコード識別を可能にする 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は「単一のテーブルの継承」をサポートしています。
所属していません StackOverflow