【问题标题】:Prefer way to allow multiple records for single id更喜欢允许单个 id 有多个记录的方法
【发布时间】:2022-01-27 03:30:29
【问题描述】:

我有如下的 Spring Boot 应用程序

@Entity
@Table( name="request_details")
@Data
public class RequestDetails{

@Id
@Column(name="data_id")
long id
String status;

@Lob
byte[] attachment;
}

以前的要求是每个请求只允许附件,现在要求更改单个请求可以有多个附件,现在我无法为单个请求存储多个附件,因为所有附件都有相同的 data_id ,修改这种方式的最佳方法是什么?

我应该使用 isNew 方法吗? 我应该通过从请求中隔离 data_id 来更改实现吗? (考虑到我还需要更新数据库架构,这将是一个非常大的变化)

【问题讨论】:

  • ID 是表的主键,每个 id 只允许有一条记录。也许您想看看w3schools.in/dbms/database-normalization 以更好地了解数据库行为以及如何解决此问题。
  • @StefanD。我知道这一点,但现在需求发生了变化,那么最好的方法是什么

标签: java spring-boot spring-data-jpa


【解决方案1】:

一种方法是使用第二列对不同的记录进行分组,例如(伪代码)

table request_details
  ID (primary key),
  attachment_nbr
  ... some other atributes
  attachment (LOB)

  unique constraint on ID, attachment_nbr

分组属性attachment_nbr必须以任何方式计算或从序列号生成器获得。

更好的方法是使用两个单独的表,例如(伪代码)

table request
  ID (primary key)
  ... some other attributes

table attachments
  ID primary key
  ... some other atributes
  attachment (LOB)
  request_id (foreign_key request.ID)

【讨论】:

  • 但是唯一性约束可以和PK一起使用吗?
  • 是的,可以!这是两件不同的事情:1)主键是一个隐式的唯一约束。 2) 对一列或多列的唯一约束。它要求在受约束的列中不出现重复的值组合。无论涉及的列上是否有任何其他索引或约束。
  • 我尝试添加但它不起作用,因为当它看到有可用的 PK 时它将运行更新操作而不是插入
  • 如果存在比您需要迁移策略的现有记录:1) 添加新列,2) 在现有记录中填充值,3) 设置新要求的唯一约束。不知道如何在 spring 中做到这一点,因为我是一个老式的 SQL 人......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2011-05-09
  • 2012-04-03
  • 2017-01-07
  • 2017-05-11
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多