2012-03-03 43 views
1

数据库在用户名称字段上有一个唯一的约束索引。数据库约束是否映射到业务逻辑

通过

service.GetUser(userName); 

业务服务会检查用户名是否已经存在。由于该服务中的逻辑,永远不会插入重复的名称。我没有发现号码为2627的SqlException的例外情况,这是违反唯一约束条件的。

那么,为什么我会把一个唯一的约束放在名称字段?

回答

0

由于服务中的这种逻辑,永远不能插入重复的名称,所以为什么我应该在NAME字段上添加一个唯一约束?

由于没有其他好的方法可以保证在数据库的整个生命周期内没有应用程序通过该服务添加数据。

我熟悉的每个dbms包括一个命令行界面,一个图形界面和一个批量加载程序。这使得至少有三个应用程序可用于修改数据,而无需通过service.GetUser()。

+0

喜欢你的答案主要:) – Pascal 2012-03-04 08:58:08

1

将UNIQUE约束放置在数据库层可确保不管重复的名称在插入点(或更新)的入口位置发生时都不会发生。例如,如果您将其留给应用程序层以确保唯一名称,那么如果有人直接从命令行插入行,或者应用程序范围外的批处理脚本会发生什么情况?

IMO,最好在数据库层保持这种独特的约束行为。

2

您应尽可能多地在数据层上放置业务逻辑。关系,唯一性,长度,最小长度,价值限制,无论你可以。

不要相信应用程序将其正确放入,数据用户将尝试以任何可能的方式将其分解。我个人认为,发送500错误数据比接受它并稍后修复更好,尽管有些人会告诉你,否则,因为这是一个非常有争议的问题。

祝你好运。

+0

同意荷鲁斯100%。 – 2012-03-15 20:08:52