是否应该在模型和数据库中都设置唯一约束?

Posted

技术标签:

【中文标题】是否应该在模型和数据库中都设置唯一约束?【英文标题】:Should a unique constraint be set both in the model and the database? 【发布时间】:2016-11-20 14:07:54 【问题描述】:

我正在使用 ORM 使用 MVC 模式构建一个应用程序,我正在努力理解在模型和迁移(数据库)中设置默认值和约束的“最佳实践”。

是否建议在模型和数据库中都设置验证,或者只在其中一个中设置验证?如果是后者,是哪一个?

【问题讨论】:

【参考方案1】:

在数据库中设置约束后,无论是通过您现在正在构建的应用程序还是通过其他交互或编程接口访问数据库,都会强制执行这些约束。因此,在数据库中设置的约束可以为您提供更强大的数据完整性保护。

【讨论】:

这是有道理的。这么好的主意。但除此之外,您为什么还要费心在模型中添加约束,为什么不让它保持干燥而不重复自己呢? 如果在数据库中设置了约束,我不会费心在 ORM 中应用约束。但是,我几乎从不使用 ORM,因为 DBMS 功能和 SQL 更强大,而且在数据库连接器中添加了一些自定义方法也同样易于使用。 但是在模型中添加约束也没有缺点吗? 可能对性能有一点影响,因为 ORM 将重复 DBMS 将执行的完整性检查。但应该没有数据完整性方面的缺点。

以上是关于是否应该在模型和数据库中都设置唯一约束?的主要内容,如果未能解决你的问题,请参考以下文章

SQL中如何设置唯一性约束

是否可以使用 Entity Framework Code First 设置唯一约束?

Oracle数据库中违反唯一约束的处理

mysql唯一约束

powerdesigner设置唯一键,但不是主键的方式

检查重复记录 VS 尝试/捕获唯一键约束