我正在编写一个允许插入到我的数据库中的链接表的方法,我想知道我是否需要首先检查以确保指定的 PK 确实存在于链接表中。在我看来,我可以 100% 地依赖数据库来为我强制执行这些 FK 约束,并通过表的 PK 防止重复的表条目,这似乎是合乎逻辑的。事实上,如果数据库无论如何都要检查它们,那么事先检查这些对我来说似乎是多余的和浪费资源。另外请注意,我在这里谈论的是非常基本的 RDBMS 概念;我希望即使切换到另一种数据存储机制,它们也能同样得到执行。
那么在这种情况下,有什么理由不完全依赖数据库来保证FK和PK的数据完整性呢?换句话说:
using (var context = new MyDbContext()) {
try {
context.LinkEntries.Add(new LinkEntry { key1 = x, key2 = y });
return context.SaveChanges() > 0;
}
catch (DbUpdateException) {
// Duplicate, or foreign key violation
return false;
}
}
最佳答案
关系数据库将强制执行引用完整性 - 假设您已正确设置外键。
1) 这将确保 key1
和 key2
实际上指向主表中的行。
2) 如果您还想确保链接表中只能存在具有一对特定外键的行,则必须在数据库中对这些列添加唯一约束。
如果您使用这对外键作为您的链接表主键,您应该没问题。
关于c# - 有什么充分的理由不依赖业务逻辑中的数据库 key 完整性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927515/