gpt4 book ai didi

sql - 多个触发器与单个触发器

转载 作者:行者123 更新时间:2023-12-02 12:50:58 25 4
gpt4 key购买 nike

场景:

每次向表中插入/更新/删除数据时,最多需要发生 3 件事:

  1. 数据需要记录到单独的表中
  2. 必须对隐式相关数据强制执行引用完整性(我指的是应与外键关系链接的数据,但事实并非如此:例如,当更新 Table1.Name 时还将 Table2.Name 更新为相同的值)
  3. 需要执行任意业务逻辑

数据库的架构和模式不得更改,并且必须使用触发器来完成需求。

问题

哪个选项更好?:

  1. 每个操作(插入/更新/删除)一个触发器,处理多个问题(日志、强制隐式引用完整性以及执行任意业务逻辑)。该触发器可以命名为D_TableName(“D”表示删除)。
  2. 每个操作有多个触发器,并按关注点隔离。他们可以被命名为:

    • D_TableName_Logging - 用于在删除内容时进行记录
    • D_TableName_RI
    • D_TableName_BL

我更喜欢选项 2,因为单个代码单元有一个关注点。我不是 DBA,对 SQL Server 的了解足够多,这让我很危险。

是否有任何令人信服的理由可以在一个触发器中处理所有问题?

最佳答案

哇,你处于一个双赢的境地。谁曾要求通过扳机来完成所有这些事情,应该被 Gunicorn ,然后被解雇。通过触发器强制执行 RI?

你说数据库的架构和模式不能改变。然而,通过创建触发器,您至少改变了数据库的模式,并且可能会改变体系结构。

我可能会选择选项#1,并创建额外的存储过程和 UDF 来处理日志记录、BL 和 RI,以便代码在各个触发器之间不会重复(触发器将调用这些存储过程和/或 UDF) 。我真的不喜欢按照您在选项 2 中建议的方式命名触发器。

顺便说一句,请告诉您组织中的某人,这太疯狂了。 RI 不应通过触发器强制执行,并且业务逻辑不属于数据库。

关于sql - 多个触发器与单个触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14145451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com