Sql server 用于数据完整性的触发器/存储过程

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

我有一个名为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 Type\u ID
    为1的文档记录意味着它与
    Project\u ID=1357
    相关

  • Document\u Type\u ID=2
    Sites
    表相关,因此具有1357的
    table\u Unique\u ID
    Document\u Type\u ID
    2的文档记录意味着1357的
    Site\u ID

等等

这允许我们在任何表格、
项目
站点
联系人
等中为各种记录保留哪些类型的文档,而不是创建单独的表格(
项目(文档
)、
站点(文档
等)

但是有人指出,使用传统的简单PK/FK关系很难(或不可能)实现数据完整性,因为1357可能与
项目
站点
相关

目前,数据完整性由用户界面检查处理

问题是,触发器或存储过程在插入
文档
记录或删除“其他”记录(
项目
联系人
等)时是否有帮助


如果是这样的话,我真的很感激被指向正确的方向。

你的主要目标是什么?数据完整性,还是灵活性和干净的设计?这些是相互冲突的利益。如果你必须在没有触发器的情况下强制执行完整性,那么你必须有一个更丑陋的设计。在数据库设计中总是要做出妥协。你会看到数据完整性精英们喋喋不休地谈论这种设计有多糟糕,但归根结底,更标准化的设计值得吗?

看起来非常灵活,但从数据完整性的角度来看,这是一种可怕的设计。我不会把时间浪费在调查触发器和其他东西上——修复设计!我百分之百同意@marc_s。这个设计看起来很“酷”,但在实践中它会很痛苦和缓慢。目前数据完整性是通过用户界面检查来处理的-这让我胆战心惊。。。。。基本上,这种情况下不会处理数据完整性…感谢您的诚实-我觉得这可能会引起争议!我将追求更严格的选择。在最严肃的业务应用程序中,数据完整性比“漂亮”的设计更重要。。。毕竟,数据是解决方案的基础。如果你有一个很好的设计,但是你的数据质量很差,你很快就会破产。不要牺牲所有重要的数据完整性来换取诸如“新的和流行的”设计之类的东西——这些设计每月都会出现——您的数据将在未来几十年中存在(并且对您的业务非常重要)。它最好状态良好!