2

在应用程序级别处理具有唯一键约束的表上的数据插入/更新的最佳实践是什么?这些是我想出的:

1、在插入数据之前对表进行查询,看是否会违反约束。

优点

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

缺点

  • 由于大多数时候不会违反约束,因此可能会影响性能。
  • 在运行重复数据查询时,您需要锁定表。

2.什么都不做。更新表格,看看有什么问题。

优点

  • 简单的!
  • 总体速度更快,因为您不必在每次更新表时都运行额外的查询。

缺点

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

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

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

谢谢!

4

4 回答 4

3

你已经总结的差不多了。如果性能是一个问题,请选择第二种方式。如果诚信是一个问题,请选择第一种方式。

我个人更喜欢诚信而不是表现。硬件很便宜,完整性不行。

相关问题:

于 2010-12-20T19:44:12.230 回答
2

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

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

于 2010-12-20T19:55:50.797 回答
1

我喜欢“乐观”的方法(“什么都不做”)。你已经列举了优点。您是对的,在这种情况下,您将验证委托给 DB 层。但是如果您使用的是 JPA,则 DB 层也是由 java 层生成的,因此实际上您的验证取决于您在 java 代码中的注释。因此,这不是什么大罪。

于 2010-12-20T19:45:54.147 回答
1

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

于 2010-12-20T19:46:05.833 回答