繁体   English   中英

独特的关键约束

[英]Unique Key Constraint

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

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

优点

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

缺点

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

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

优点

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

缺点

  • 您的验证例程取决于数据库层。
  • 如果数据没有保留,则必须遍历堆栈跟踪以查找原因。

哪个是更广泛接受的解决方案? 有其他替代方法吗?

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

谢谢!

您已经对它进行了总结。 如果需要考虑性能,请选择第二种方法。 如果要考虑完整性,请采用第一种方法。

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

相关问题:

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

避免使用重言式“唯一”键。 键是唯一的,因此“键”一词足以说明您的意思。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM