Sql server 是否使用SQL Server检查约束或应用程序逻辑来保持用户Id上的引用完整性?

Sql server 是否使用SQL Server检查约束或应用程序逻辑来保持用户Id上的引用完整性?,sql-server,referential-integrity,Sql Server,Referential Integrity,出于审计目的,数据库中的每个Sql Server表都有一个“LastUpdateUserID”和“CreateduserId”列 这些列是ApplicationUser表中的外键 严格来说,每个表中的两列都应该有一个检查约束 然而,这使得数据图不可读,也不可能进行布局 应用程序负责使用当前登录的“ApplicationUser”更新这些列 所以 。。。我应该使用SQL服务器检查约束还是依赖应用程序来强制引用完整性 我应该用 始终检查约束。没有任何外部应用程序能够比在SQL Server中内部管理

出于审计目的,数据库中的每个Sql Server表都有一个“LastUpdateUserID”和“CreateduserId”列

这些列是ApplicationUser表中的外键

严格来说,每个表中的两列都应该有一个检查约束

然而,这使得数据图不可读,也不可能进行布局

应用程序负责使用当前登录的“ApplicationUser”更新这些列

所以

。。。我应该使用SQL服务器检查约束还是依赖应用程序来强制引用完整性

我应该用

始终检查约束。没有任何外部应用程序能够比在SQL Server中内部管理更有效地实施RI。这就是我们使用SQL Server的原因

数据图不可读且无法布局

尝试更好的布局软件。在任何情况下,这都不会影响您的RI需求

严格地说

你已经回答了你自己的问题

跟进


无论您是使用LINQ还是某些UI强制的类型约束,都不重要。您的数据首先必须是可靠的(满足引用完整性)。无论您是在SQL中还是在应用程序中执行,这都不重要。只是在处理类型安全性(强类型模型强加的)之前,首先需要RI。曾经有Erik Meijer(LINQ的设计师)的视频解决了这个问题

至于我发布的另一个问题,我使用ORM解决了这个问题 (DevExpress XPO)


这将抽象掉几乎所有的数据库-因此在OO应用程序中,(几乎)根本不需要考虑持久化对象的数据存储

什么使数据图不可读?外键?我不知道你在问什么。是否要删除外键?因为按照您当前的设计,所有与用户表链接为外键的审核表都可以确保引用的完整性。我有85个表,所有这些表都(至少)有2列是ApplicationUser表的外键。表之间还有许多其他关系。因此,仅从ApplicationUser表来看,数据图上就有170多条关系线。你可以想象这张图读起来有多困难!这是一个“SQL开发者”或纯粹主义者的观点。该应用程序是强类型的,并且使用LINQ to SQL,只在单个方法中从ApplicationUser表获取ID值。如果有人错误地添加代码以使用任意ID值,则查询“谁更新了此值”将给出错误的用户(测试将消除此错误),或者如果ID值不在ApplicationUser表中(异常处理将处理此错误)…并且不加约束是以开发人员为中心的视图。。。我认为这两个阵营永远不会达成一致。可能有人会引入破坏完整性的bug。此外,约束和外键可以帮助性能。然而,有可维护性的可读性,如可读性和可理解性。作为一个经常被要求“修复代码”的承包商,最大的问题是理解问题所在,并在不引入新缺陷的情况下修复它。在这种情况下,SQL RI将使这个非常困难的数据图几乎无法破译。对用户类和方法的注释使其非常清楚。此外,软件设计文件将记录国际扶轮的决定和原因them@AndrewBingham正如你所说的“…SQL RI将使这变得非常困难…”是真的。但更为真实的是,40年来,破译一种计算机语言是非常容易和合乎逻辑的,而不是使用任何一种月语言进行调试,或者依赖于任何原始程序员的文档实践或写作技能。SQL早于类和方法的OO编程范式,并将在每种以咖啡口味命名的语言中生存。我认为,相反,SQL数据库和T-SQL已经有40年的历史了,它们现在都过时、笨拙、难以使用(与.Net相比),并且SQF非常差。另一方面,语言已经进化和改进,同样重要的是,它们现在已经集成到框架和环境(.Net和Visual Studio)中。有趣的是,微软要用SQL Server和T-SQL实现同样的目标有多难?SQL管理站正逐渐被购买,以适应现代语言环境,但仍然很差