0

我有 2 个实体,比如说ClientCompany(都是User的子类)。
每个都有一个事件列表:ClientEventsCompanyEvents

我们首先拆分这些表(而不是使用事件表)的原因是每种事件不会混合(一次只能对一种事件进行操作)。这也将导致拥有 2 个较小的表而不是一个大表。

  1. 这是一个好方法吗?(大表数据量~1M)
    也许不需要将这些表一分为二而只使用继承?
  2. 将其建模为实体的最佳方法是什么?

两种类型实体的属性和操作是相同的,因此我可以将其建模为:

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

现在有没有一种方法可以查询每种类型的特定事件而无需在 DAO 中复制方法(使用 hibernate 或 JPA,也许泛型会在这里使用)?
3. 在这种情况下(两个独立的存在,但属性和操作相同)是否有“经验法则”来建模数据库表和实体?

4

1 回答 1

1

这取决于表的大小(事件总数)、您希望这些事件在活动表中保留多长时间、新事件的频率和旧事件的检索。

如果新活动不频繁,您可以保留一张桌子。如果新事件非常频繁并且您需要经常搜索它们,最好有两个单独的表。

您可以通过将这些旧事件归档到一张表中来加快搜索/检索速度。

简而言之,任何设计都取决于业务的需要。

多个表格可以让您更快地搜索,而单个表格可以让您轻松访问并简化代码/设计。

对于访问,您可以使用相同的方法,只需将事件类型作为参数传递并在此基础上构建查询。

于 2012-09-25T14:29:39.387 回答