Sql server 用于数据完整性的触发器/存储过程
我有一个名为Documents的表,它存储文件名、关于文档的注释等。相关字段包括:Sql server 用于数据完整性的触发器/存储过程,sql-server,stored-procedures,triggers,data-integrity,Sql Server,Stored Procedures,Triggers,Data Integrity,我有一个名为Documents的表,它存储文件名、关于文档的注释等。相关字段包括: 文档ID-自动编号 Document\u Type\u ID-FK到查找表Document\u Type Table\u Unique\u ID 表\u Unique\u ID与其他表中使用的任何其他ID相关,我们通过相关的文档类型\u ID知道哪个表 例如 Document\u Type\u ID=1与Projects表相关,因此table\u Unique\u ID为1357且Document\u Ty
-自动编号文档ID
-FK到查找表Document\u Type\u ID
Document\u Type
Table\u Unique\u ID
表\u Unique\u ID
与其他表中使用的任何其他ID相关,我们通过相关的文档类型\u ID
知道哪个表
例如
与Document\u Type\u ID=1
表相关,因此Projects
为1357且table\u Unique\u ID
为1的文档记录意味着它与Document\u Type\u ID
相关Project\u ID=1357
与Document\u Type\u ID=2
表相关,因此具有1357的Sites
和table\u Unique\u ID
2的文档记录意味着1357的Document\u Type\u ID
Site\u ID
项目
、站点
、联系人
等中为各种记录保留哪些类型的文档,而不是创建单独的表格(项目(文档
)、站点(文档
等)
但是有人指出,使用传统的简单PK/FK关系很难(或不可能)实现数据完整性,因为1357可能与项目
或站点
相关
目前,数据完整性由用户界面检查处理
问题是,触发器或存储过程在插入文档
记录或删除“其他”记录(项目
,联系人
等)时是否有帮助
如果是这样的话,我真的很感激被指向正确的方向。你的主要目标是什么?数据完整性,还是灵活性和干净的设计?这些是相互冲突的利益。如果你必须在没有触发器的情况下强制执行完整性,那么你必须有一个更丑陋的设计。在数据库设计中总是要做出妥协。你会看到数据完整性精英们喋喋不休地谈论这种设计有多糟糕,但归根结底,更标准化的设计值得吗?看起来非常灵活,但从数据完整性的角度来看,这是一种可怕的设计。我不会把时间浪费在调查触发器和其他东西上——修复设计!我百分之百同意@marc_s。这个设计看起来很“酷”,但在实践中它会很痛苦和缓慢。目前数据完整性是通过用户界面检查来处理的-这让我胆战心惊。。。。。基本上,这种情况下不会处理数据完整性…感谢您的诚实-我觉得这可能会引起争议!我将追求更严格的选择。在最严肃的业务应用程序中,数据完整性比“漂亮”的设计更重要。。。毕竟,数据是解决方案的基础。如果你有一个很好的设计,但是你的数据质量很差,你很快就会破产。不要牺牲所有重要的数据完整性来换取诸如“新的和流行的”设计之类的东西——这些设计每月都会出现——您的数据将在未来几十年中存在(并且对您的业务非常重要)。它最好状态良好!