Sql server 正在寻找sql server中用户友好的CheckConstraint错误消息的策略
我正在设置一个数据库,有几个表中有许多行间依赖关系,需要在创建/更新行之前进行检查。有许多字段具有来自许多源的max/min/avg/stdev 我想我会创建一些约束,确保所有关系的max>=min,avg>=min,avg=0。通过这种方式,我在数据库中设置了它,任何不正确地接触数据的操作都会抛出一个错误。这个机制工作得很好…除了从用户的角度来看错误消息是可怕的,基本上是说一个约束失败了,让用户决定20个约束中哪一个是坏的 我可以在客户机代码中通过查看约束异常,然后运行数据来查找问题来解决这个问题。该解决方案在两个地方进行了验证Sql server 正在寻找sql server中用户友好的CheckConstraint错误消息的策略,sql-server,check-constraints,Sql Server,Check Constraints,我正在设置一个数据库,有几个表中有许多行间依赖关系,需要在创建/更新行之前进行检查。有许多字段具有来自许多源的max/min/avg/stdev 我想我会创建一些约束,确保所有关系的max>=min,avg>=min,avg=0。通过这种方式,我在数据库中设置了它,任何不正确地接触数据的操作都会抛出一个错误。这个机制工作得很好…除了从用户的角度来看错误消息是可怕的,基本上是说一个约束失败了,让用户决定20个约束中哪一个是坏的 我可以在客户机代码中通过查看约束异常,然后运行数据来查找问题来解决这个
我不希望将错误消息分配给每个约束(在db中),并通过异常机制将该消息过滤到UI。是否有某种机制可以让用户友好的消息渗透到UI,而不复制业务逻辑中的数据验证?更重要的是,这类问题的基本策略是什么?从服务器返回的唯一您可以控制的是约束名称-因此,请尝试确保这些约束名称尽可能具有描述性,或者将约束名称映射到异常处理程序中用户友好的错误消息 在这种情况下,尝试使每个约束尽可能细化,因此每种类型的失败都是不同约束的失败。当然,您还有一个问题,SQL Server只会报告第一个失败的约束—您的数据实际上可能会失败多个约束
在他们提交数据之前,除了在你的申请中重复检查外,我想不出你还能做什么。我倾向于认为这种重复类似于web页面上的客户端/服务器验证——您在客户端运行验证,以改善用户体验,并避免不必要的往返服务器。但是,如果客户端验证因任何原因失败,服务器必须保护自己。同意:业务和验证逻辑应该意味着数据库从不抛出错误。但是RDBMS负责数据的完整性,所以一般来说客户端不应该依赖检查约束来进行数据验证?对于这个例子,风险很低,因为没有神奇的数字(max>=min类)。