#mysql #sql #sqlite
Хорошей ли считается практикой, обновлять данные в связанных (FOREIGN KEY- внешним
ключом) таблиц , через триггеры?
Есть два варианта обновления данных:
1.через триггеры
2.через внешний ключ добавив параметр - ON UPDATE CASCADE
Какой вариант считается более предпочтительнее?
Примечание: Добавление и обновления данных, будет происходить только в родительской
таблице. Но читать мы эти данные будем из дочерней таблицы, которая связанна с родительской.
И для того что бы мы получили актуальные данные из дочерней таблицы, мы должны их как
то 'синхронно' или почти синхронно обновлять из родительской таблицы. В связи с этим,
я рассматриваю два варианта, которые описал выше.
Ответы
Ответ 1
Через внешний ключ можно лишь контролировать целостность таблиц. Т.е. ForeignKeyId всегда будет указывать запись в родительской таблице. Единственные данные, которые вы можете обновить, это этот самый Id с помощью параметра ON UPDATE CASCADE Триггер даёт вам гибкость. Например, если возможно цикличное удаление, то каскадное удаление создать нельзя в принципе и тут в любом случае только триггер вас спасёт. Минус триггеров в том, что зачастую их в базе не видно и сложно понять, например, почему при удалении возникает ошибка в какой-нибудь таблице с которой, вы, вроде бы, в данный момент не работаете.
Комментариев нет:
Отправить комментарий