如何为具有相同字段和功能的多个实体建模

时间:2012-09-25 13:58:01

标签: java hibernate database-design

我有2个实体,让我们说客户公司用户的子类)。
每个都有一个事件列表: ClientEvents CompanyEvents

我们首先拆分这些表格(而不是使用事件表格)的原因是每种事件都不会混合(您只能在一个表格上运行)一次一种事件)。这也会导致有2个较小的表而不是一个大表。

  1. 这是一个好方法吗? (大表数据量〜1M)
    也许没有必要将这些表拆分为两个并只使用继承?
  2. 将其建模为实体的最佳方式是什么?
  3. 两种类型的实体的属性和操作都是相同的,因此我可以将其建模为:

     @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.有没有经验法则?在这样的情况下(两个独立的存在但相同的属性和操作)来建模数据库表和实体?

1 个答案:

答案 0 :(得分:1)

这取决于表的大小(总计事件数),您希望将这些事件保留在活动表中的时间长度,新事件的频率以及旧事件的检索。

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

通过将这些旧事件存档到一个表中,您可以更快地进行搜索/检索。

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

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

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