唯一键约束

时间:2010-12-20 19:37:07

标签: java design-patterns database-design application-design

在具有应用级别的唯一键约束的表格上处理数据插入/更新的最佳做法是什么?这些是我提出的:

1。在插入数据之前对表运行查询以查看它是否会违反约束。

赞成

  • 您拥有完全控制权,因此您无需处理任何特定于DBMS的错误消息。
  • 数据完整性检查的附加层

缺点

  • 可能会受到影响,因为大部分时间都不会出现约束违规行为。
  • 在运行重复数据查询时,您需要锁定表。

2。没做什么。更新表格,看看有什么棒。

赞成

  • 简单!
  • 整体速度更快,因为每次更新表时都不必运行其他查询。

缺点

  • 您的验证例程取决于数据库层。
  • 如果数据不坚持,您必须通过堆栈跟踪来查找原因。

哪一个是更广泛接受的解决方案?有替代品吗?

我正在使用Java,JPA,Hibernate和Spring BTW。任何建议,甚至是特定的框架,都是受欢迎的!

谢谢!

4 个答案:

答案 0 :(得分:3)

你已经非常总结了。如果表现是一个问题,请选择第二种方式。如果诚信是一个问题,请选择第一种方式。

我个人赞成诚信而不是表现。硬件非常便宜,完整性不是。

相关问题:

答案 1 :(得分:2)

第三种选择是使用MERGE操作(有时称为UPSERT),如果您的DBMS支持它。通常有一种DBMS特定的方法来检查是否插入了行。

避免重言式“独特”的关键。键是唯一的,所以“键”这个词足以说明你的意思。

答案 2 :(得分:1)

我喜欢“乐观”的做法(“无所事事”)。你已经列举了专业人士。 你是对的,在这种情况下,你将验证委托给DB层。但是你使用JPA,DB层也是由java层生成的,所以实际上你的验证取决于你在java代码中的注释。因此,这不是一个大犯罪。

答案 3 :(得分:1)

唯一键通常是业务需求,因此您应该使用业务层来检查您打算使用的是否可用。将检查委派给数据库是一种优化,只应在需要时进行。