【发布时间】:2015-02-24 15:05:15
【问题描述】:
我有一个名为 Documents 的表,它存储有关文档的文件名、注释等。相关字段是:
-
Document_ID- 自动编号 -
Document_Type_ID- FK 到查找表Document_Types Table_Unique_ID
Table_Unique_ID 与其他表中使用的任何其他 ID 相关,并且我们通过相关的Document_Type_ID 知道 哪个 表。
例如
Document_Type_ID = 1与Projects表相关,因此Table_Unique_ID为1357 和Document_Type_ID为1 的文档记录表示它与Project_ID = 1357相关。Document_Type_ID = 2与Sites表相关,因此具有 1357 的Table_Unique_ID和 2 的Document_Type_ID的文档记录意味着 1357 的Site_ID
等等。
这为我们为任何表中的各种记录保存的文档类型提供了极大的灵活性,Projects、Sites、Contacts 等,而不是创建单独的表(Project_Documents、Site_Documents 等)。 )。
但是有人指出,使用传统的简单 PK/FK 关系很难(或不可能)强加数据完整性,因为 1357 可能与 Projects 或 Sites 相关。
目前数据完整性由用户界面检查处理。
问题是,在插入Document 记录或删除“其他”记录(Projects、Contacts 等)时,触发器或存储过程是否有帮助?
如果是这样,我将非常感谢您指出正确的方向。
【问题讨论】:
-
看似非常灵活 - 但从数据完整性的角度来看,这是一个可怕的设计。我不会浪费时间研究触发器和其他东西 - 修复设计!
-
我 100% 同意 @marc_s。这个设计看起来很“酷”,但实际上它会很痛苦而且很慢。
-
目前数据完整性由用户界面检查处理 - 这让我胆战心惊.....基本上,数据完整性是 NOT 在这种情况下处理....
-
感谢您的诚实 - 我觉得这可能会引起争议!我会追求更严格的选择。
标签: sql-server stored-procedures triggers data-integrity