Database design 使用检查约束-从J2EE应用程序设计的角度来看,这有多有用?

Database design 使用检查约束-从J2EE应用程序设计的角度来看,这有多有用?,database-design,web-applications,jakarta-ee,Database Design,Web Applications,Jakarta Ee,说: 检查约束用于限制可以设置的值范围 放在一列中 如果我们在单个列上定义一个CHECK约束,它只允许某些 此列的值 如果我们在一个表上定义一个检查约束,它可以限制表中的值 基于中的值的某些列 行中的其他列 从设计web应用程序的角度来看,在DB上添加此约束肯定有助于避免数据损坏,并且可以在web应用程序的验证层中避免检查字段级数据的额外验证级别。我在这里看到的唯一问题是,从数据库返回的错误消息没有意义,无法显示给最终用户 你怎么说?或者我会问,您在什么情况下使用了此约束?检查约束(与其他约束一

说:

检查约束用于限制可以设置的值范围 放在一列中

如果我们在单个列上定义一个CHECK约束,它只允许某些 此列的值

如果我们在一个表上定义一个检查约束,它可以限制表中的值 基于中的值的某些列 行中的其他列

从设计web应用程序的角度来看,在DB上添加此约束肯定有助于避免数据损坏,并且可以在web应用程序的验证层中避免检查字段级数据的额外验证级别。我在这里看到的唯一问题是,从数据库返回的错误消息没有意义,无法显示给最终用户

你怎么说?或者我会问,您在什么情况下使用了此约束?

检查约束(与其他约束一样)是为了保证额外的一致性,但它们不得用于替换应用程序中的验证逻辑,正如您所提到的,验证逻辑应显示有意义的错误消息,并且应(至少)完成在表示层中,在访问数据库之前

即使它们看起来像是验证逻辑的重复,约束仍然是有用的,因为

  • 验证逻辑可能有缺陷,或者被遗忘
  • 除了webapp(数据库脚本等),可能还有其他写入数据库的方法
  • 在执行验证逻辑和检查约束之间,另一个事务可能已经更改了数据库中的数据

dbms实施的约束是保证。应用程序级别的检查是“附加级别”。解决“来自数据库的错误消息没有意义”是很容易的-假设您的检查约束被命名,它们应该有一个表,将这些检查约束错误与您的应用程序可以查询的有意义消息关联起来。