我想在“多对多关系表”中保存记录的变化历史。表是A,B和AB_Map,其中AB_Map表是A和B之间的链接表。考虑到表B是不可变的(表B内的记录永不更改,因此表B不需要历史记录)。
Table A
---------
ID_a (PK)
a_field1
a_field2
a_field3
Table AB_Map
-------------
ID_a (PK, FK1)
ID_b (PK, FK2)
quantity
Table B (Records never update)
----------
ID_b (PK)
b_field1
b_field2
所以我想保存表A和表AB_Map的历史记录。
我认为的唯一方式是
创建表A_History和表AB_Map_History:
Table A_History
-----------------
ID_a_history (PK)
ID_a (FK)
a_field1
a_field2
a_field3
Table AB_Map_History
--------------------
ID_a_history(PK, FK1)
ID_b (PK, FK2)
quantity
对于表A中的每个更改,先前的记录将插入到A_History中,表AB_Map中的链接记录将插入到AB_Map_History中。 如果与A到B的关系之间没有任何变化,这种方式还将在Table_Map_History中创建记录。 我认为这是更简单的方法,但是如果不需要,我不喜欢消耗内存。
所以我想知道是否还有其他方法可以处理这种情况,以及您在这些情况下会怎么做。
现在我在A表上使用此触发器来解决我的情况:
CREATE DEFINER = `root`@`localhost` TRIGGER `SaveHistory` BEFORE UPDATE
ON `A` FOR EACH ROW
BEGIN
INSERT INTO A_History(
ID_a_history,
ID_a,
a_field1,
a_field2,
a_field3
)
VALUES(
null,
OLD.ID_a,
OLD.a_field1,
OLD.a_field2,
OLD.a_field3
);
INSERT INTO AB_Map_History(
AB_Map_History.ID_a_history,
AB_Map_History.ID_b,
AB_Map_History.qnt_kt
)
SELECT
LAST_INSERT_ID(), AB_Map.ID_b, AB_Map.qnt_kt
FROM
AB_Map
WHERE
AB_Map.ID_a = OLD.ID_a;
END
我的目标是仅在A中的记录与B中的记录之间的关系更改或数量更改时才将记录保存在AB_Map_History中。
我希望我能清楚地解释我的问题。 预先感谢