数据库在用户NAME字段上有唯一的约束索引。
业务服务通过
进行检查service.GetUser(userName);
查看用户名是否已存在。由于服务中的这种逻辑,永远不会插入重复的名称。我没有捕获具有Number = 2627的SqlException
的异常,这是针对唯一约束违规的。
那么我为什么要在NAME字段上加上一个唯一约束呢?
答案 0 :(得分:2)
您应该尽可能多地将业务逻辑放在数据层。关系,唯一性,长度,最小长度,价值限制,无论你能做什么。
不要相信应用程序将其正确放入,数据用户会尝试以任何方式破解它。我个人认为发送500个不良数据比接受它并稍后修复更好,尽管有些人会告诉你,因为这是一个非常有争议的问题。
祝你好运。答案 1 :(得分:1)
将UNIQUE约束放在数据库层可确保无论插入(或更新)的条目位于何处,都不会出现重复的名称。例如,如果将其保留到应用程序层以确保唯一名称,如果有人直接从命令行插入行,或者在应用程序范围之外插入批处理脚本会发生什么?
IMO,最好将这种独特的约束行为保留在数据库层。
答案 2 :(得分:1)
由于服务中的这种逻辑,永远不会插入重复的名称,所以为什么我应该在NAME字段上添加一个唯一的约束?
因为没有其他好方法可以保证在数据库的整个生命周期内,除了通过该服务之外,任何应用程序都不会添加数据。
我熟悉的每个dbms都包含一个命令行界面,一个图形界面和一个批量加载器。这使至少三个应用程序可用于修改数据而无需通过service.GetUser()。