Я хочу хранить историю изменений записей в «Таблице отношения многие ко многим». Таблицы - это A, B и AB_Map, где таблица AB_Map - это таблица связей между A и B. Учитывая неизменность таблицы B (записи внутри таблицы B никогда не меняются, поэтому таблица B не нуждается в истории) Scanario таков:
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. Этот способ создаст запись в Table_Map_History также, если нет никаких изменений между отношением с A к B. Я думаю, что это более простой способ сделать это, но я не люблю расходовать память, если в этом нет необходимости.
Поэтому я хотел бы знать, есть ли другие способы справиться с этой ситуацией и что вы делаете в таких ситуациях.
Теперь я использую этот триггер для таблицы 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
Моя цель - сохранять записи в AB_Map_History только при изменении отношения между записью в A и записями в B или при изменении количества.
Надеюсь, я ясно объяснил свою проблему. заранее спасибо
Я полагаю, вы хотите написать триггер. Он хочет срабатывать при изменении записи в A и изменении записей в B, или при изменении количества.
Мой вопрос в том, верен ли мой подход или есть другая альтернатива, которая экономит место в моей базе данных.
@sanduniYW я отредактировал сообщение о добавлении триггера, который сейчас используется
Ваш код работает нормально или нет?
@sanduniYW мой код работает нормально, но я не был уверен в его правильности с точки зрения памяти






Так в чем вопрос?