我的问题主要是关于“什么对性能最好”,但也有点“哲学上”(如果它有所作为的话)......所以让我们直接进入。
[TableA].[ColumnB] 存储了一个需要存在于 [TableC].[ColumnD] 中的值。马上,没有涉及外键的答案- 只是假设它们在这个环境中是“不允许的”,无论出于何种原因。
但是由于“情况 x,y,z”,[TableA].[ColumnB] 有时会得到 [TableC].[ColumnD] 中不存在的值,因为,比方说,[TableA] 是从存在的对象中填充的在将代码作为“序列化 blob”运行时,内存中的数据表示形式和 [ColumnB] 值在被其他进程从 [TableC].[ColumnD] 中删除这些值之前填充。无论如何,这是为了举例,所以不要陷入“为什么会发生这种情况”,只要接受它。
要“解决”问题,这两种方法中哪种方法最好: 1. 在 [TableA] 上创建一个触发 on-INSERT 的触发器,将 [ColumnB] 更新为它应该是的值(并假设我有一个“映射”的坏值到好值)。或者,2. 每隔一小时/一分钟/运行更新查询的任何时间运行一个计划作业,以将所有可能的“坏”值更改为其相应的“好”值。
更一般地说,什么对性能更好和/或什么是最佳实践:触发器或定期计划作业?在上下文中,假设 [TableA] 通常大约有数十万行,一次插入 10-100 条记录,频率可能每隔几分钟到一天几次。