通过触发器同步一组表记录



我有一个来自现有产品的表(因此不可能更改模式),其模式类似于以下内容:

objectId, typeId, value

我需要做的是从本质上使几个typeId相互链接并同步。请参阅下面的示例。将有大约35组,每组3-4个链接类型ID。

我想不出合理的方法来做到这一点,即高性能、处理多行插入和防止触发递归。有什么建议吗?

示例

typeId 1、2和3应该被链接。

INSERT INTO foo (objectId, typeId, value) VALUES (1, 1, 'bar')

应生成包含以下的表格

╔══════════╦════════╦═══════╗
║ objectId ║ typeId ║ value ║
╠══════════╬════════╬═══════╣
║        1 ║      1 ║ bar   ║
║        1 ║      2 ║ bar   ║
║        1 ║      3 ║ bar   ║
╚══════════╩════════╩═══════╝

对其中任何一条记录的值的任何更新都应导致所有记录的值发生更改。

最后,我通过修改有问题的应用程序使用的"insert"one_answers"update"存储过程来解决问题,而不是使用触发器来解决问题。

插入过程的结果是这样的:

IF @typeId IN (1,2,3)
    INSERT INTO foo (objectId, typeId, value) VALUES (@objectId, 1, @value), (@objectId, 2, @value), (@objectId, 3, @value)
ELSE IF 
    ...
ELSE
   INSERT INTO foo (objectId, typeId, value) VALUES (@objectId, @typeId, @value)

更新过程的结果是这样的:

IF @typeId IN (1,2,3)
    UPDATE foo SET value = @value WHERE objectId = @objectId AND @typeId IN (1,2,3)
ELSE IF
    ...
ELSE
    UPDATE foo SET value = @value WHERE rowId = @rowId

最新更新