将庞大的 sql 表逻辑拆分为较小的表

Posted

技术标签:

【中文标题】将庞大的 sql 表逻辑拆分为较小的表【英文标题】:Split huge sql table logically into smaller tables 【发布时间】:2021-12-16 09:26:30 【问题描述】:

我正在使用 Hibernate ORM 框架制作一个 Spring Boot 应用程序。

我在那里有Employee 实体:

@Entity
public class Employee 
    private String firstName;
    private String position;

    //// more than 30 private fields

    //// fields related to one sublogic
    private String category;
    private LocalDate categoryAssignmentDate;
    private LocalDate categoryAssignmentDeadlineDate;
    private LocalDate docsSubmitDeadlineDate;

Employee 类中有 30 多个私有字段。

如您所见,我有 4 个字段与同一子逻辑 Category 相关。

所以我的问题是:将我的Employee 实体拆分为两个实体EmployeeCategory,这将作为OnetoOne 关系连接是一个好习惯吗? p>

是否让代码更清晰?

【问题讨论】:

可能,是的。这将由database normalization 确定。给定的属性列应仅取决于表的主键。如果该属性依赖于另一个属性,则它属于另一个表。 【参考方案1】:

使用embedded and embeddable 防止双表映射和不必要的OneToOne 关系。

@Entity
public class Employee 
    private String firstName;
    private String position;

    @Embedded
    private Category category


@Embeddable
public class Category
    private String category;
    private LocalDate categoryAssignmentDate;
    private LocalDate categoryAssignmentDeadlineDate;
    private LocalDate docsSubmitDeadlineDate;

您可能需要添加attribute overrides

【讨论】:

以上是关于将庞大的 sql 表逻辑拆分为较小的表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mysqldump 的输出拆分为较小的文件?

如何将大数组拆分为较小的数组?

如何将列表拆分为较小的列表?

按列名称将数据框拆分为较小的数据框

尝试将列表拆分为较小的列表时出错

将列表拆分为较小的列表(分成两半)