0

我正在建立一个数据库,并且有几个表在创建/更新行之前需要检查许多行间依赖关系。有许多字段具有来自许多来源的 max/min/avg/stdev。

我想我会创建一些约束来确保所有关系的 max>=min, avg>=min, avg<=max, stdev>=0。这样我在数据库中设置它并且任何不正确地接触数据的东西都会引发错误。这种机制工作得很好......除了错误消息从用户的角度来看是可怕的事实,基本上是说约束失败并让用户确定20个约束中的哪一个是坏的。

我可以在客户端代码中通过查看约束异常然后运行数据来查找问题来解决此问题。该解决方案在两个地方进行了验证......

我不能希望将错误消息分配给每个约束(在数据库中)并通过异常机制将该消息过滤到 UI。是否有某种机制可以让用户友好的消息渗透到 UI 而无需在业务逻辑中复制数据验证?更重要的是,这类问题的基本策略是什么?

4

1 回答 1

2

您可以控制的服务器返回的唯一内容是约束名称 - 因此请尽量确保这些名称尽可能具有描述性,或者将约束名称映射到异常处理程序中的用户友好错误消息。

在这种情况下,尝试使每个约束尽可能细化,因此每种类型的故障都是不同约束的故障。当然,您还有一个问题,即 SQL Server 只会报告第一个失败的约束——您的数据实际上可能会失败多个约束。

除了在提交数据之前在您的应用程序中复制检查之外,我想不出您能做的任何其他事情。我倾向于认为这种重复类似于网页上的客户端/服务器验证——您在客户端运行验证,以改善用户体验,并避免不必要的服务器往返。但是如果客户端验证因任何原因失败,服务器必须保护自己。

于 2011-05-25T07:11:22.087 回答