Триггер для нескольких таблиц на INSERT - PullRequest
1 голос
/ 14 февраля 2012

быстрый вопрос.

В моей пользовательской базе данных у меня есть 5 отдельных таблиц, содержащих различную информацию. 4 таблицы связаны foreign key с primary key первой таблицы.

Я хочу trigger row вставок в другие 4 таблицы, когда я делаю вставку в первую (основную). Я думал, что ON UPDATE CASCADE сделает это для меня, но попробовав это, я понял, что это не так ... Я знаю, что ключ к названию ON UPDATE !!!!!

Я также попытался выполнить несколько триггеров на одной и той же таблице, но не смог.

То, что я планирую сделать, это поставить trigger от первого до INSERT на втором и затем поставить trigger на втором до insert на третьем ...... и т. Д.

Хотелось бы просто знать, разумно ли это делать или нет, или мне не хватает лучшего и более простого способа сделать это.

Любая помощь / совет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Не понимая вашей структуры (информация, которая вам необходима в каждой из этих таблиц, уместна для правильного ответа), я могу только догадываться, что триггер может быть не тем, что вы хотите сделать.Если в ваших таблицах есть другие поля, помимо тех, что указаны в таблице 1, и у них нет значений по умолчанию, как вы получите значение для этих других полей в триггере?Лично я использовал бы сохраненный процесс для вставки в table1 и получения значения id из вставки, а затем вставил в другие таблицы с необходимой дополнительной информацией и поместил бы все это в транзакцию, чтобы в случае сбоя одной вставки все откатывалось.

0 голосов
/ 14 февраля 2012

На основании заданной информации создается ощущение, что в структуре базы данных может быть недостаток, если каждой из дочерних таблиц требуется строка для каждой отдельной строки в родительской таблице.Существует причина, по которой «ON INSERT CASCADE» не существует;это обычно не считается значимым.

Первая мысль, которая приходит на ум, заключается в том, что дочерние таблицы должны фактически быть частью родительской таблицы;это звучит так, как будто есть отношения один-к-одному.Тем не менее, может иметь смысл иметь отдельные таблицы с организационной точки зрения (и размера записей), но об этом стоит подумать.

Если нет однозначного отношения, то возможность добавления значимых данных сверх значений по умолчанию к дочерним таблицам будет означать, что может потребоваться немного больше нормализации требуемых данных.Если единственными значениями, которые нужно добавить, являются значения NULL, то, возможно, можно утверждать, что в действительности нет смысла иметь запись, потому что LEFT JOIN может дать те же результаты без этой записи.

Сказав все это, еслиэто необходимо, я думаю, что было бы лучше иметь один триггер для родительской таблицы, чтобы добавить все записи в дочерние таблицы, а не объединять их в несколько триггеров.Таким образом, логика будет содержаться в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...