0

私には2つのエンティティがあります。たとえば、ClientCompany (両方ともUserのサブクラス)です。
それぞれにイベントのリストがあります:ClientEventsCompanyEvents

(イベントテーブルではなく)最初にこれらのテーブルを分割した理由は、各種類のイベントが混在しないためです(一度に操作できるのは1種類のイベントのみです)。また、1つの大きなテーブルではなく、2つの小さなテーブルが作成されます。

  1. それは良い方法ですか?(大きなテーブルデータ量〜1M)
    たぶん、それらのテーブルを2つに分割して、継承を使用する必要はありませんか?
  2. それをエンティティとしてモデル化するための最良の方法は何でしょうか?

両方のタイプのエンティティの属性と操作は同一であるため、次のようにモデル化できます。

 @MappedSuperclass  
 public abstract class **Event** {...}  
 @Entity @Table(name="client_event")  
 public class **ClientEvent** {...}  
 @Entity @Table(name="company_event")  
 public class **CompanyEvent** {...}

DAOでメソッドを複製せずに特定のイベントの各タイプをクエリする方法はありますか(休止状態またはJPAを使用します。ここではジェネリックスが役立つ可能性があります)。
3.データベーステーブルとエンティティをモデル化するために、このような状況(2つの別個の存在であるが、属性と操作は同一)に「経験則」がありますか?

4

1 に答える 1

1

これは、テーブルのサイズ(合計イベント数)、それらのイベントをアクティブなテーブルに保持する期間、新しいイベントの頻度、および古いイベントの取得によって異なります。

新しいイベントが頻繁に発生しない場合は、1つのテーブルを保持できます。新しいイベントが非常に頻繁に発生し、それらを頻繁に検索する必要がある場合は、2つの別々のテーブルを用意することをお勧めします。

これらの古いイベントを1つのテーブルにアーカイブすることで、検索/取得を高速化できます。

要するに、どんなデザインもビジネスの必要性に依存します。

複数のテーブルを使用すると検索が速くなり、単一のテーブルを使用するとアクセスが簡単になり、コード/デザインがシンプルになります。

アクセスには、同じメソッドを使用できます。パラメータとしてイベントタイプを渡し、その上にクエリを作成します。

于 2012-09-25T14:29:39.387 に答える