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