#php #mysql #codeigniter #activerecord
#php #mysql #codeigniter #activerecord
Вопрос:
Я хочу узнать ваше мнение по этому вопросу.
Я использую базу данных MySQL для своих проектов, и почти в каждой таблице у меня есть столбец с именем Status defined (ПЕРЕЧИСЛЕНИЕ (‘активный’, ‘неактивный’,’удаленный’)).
Я делаю это из соображений производительности, поэтому всякий раз, когда строка не нужна (удалена), я устанавливаю для нее значение «удалено» вместо фактического удаления ее из БД. Это оказалось довольно хорошим.
Но теперь мне всегда приходится писать функции PHP в своих проектах для обновления строки с активной на удаленную.
Как вы думаете, как я могу решить эту проблему, используя триггеры MySQL или используя другую технику?
Спасибо
Ответ №1:
Что плохого в обновлении строки, чтобы установить для нее значение deleted?
В конце концов,
UPDATE projects SET status = 'deleted' WHERE id = :id;
против
DELETE FROM projects WHERE id = :id;
не имеет большого значения или нет?
Ответ №2:
Я считаю, что нет большой разницы между написанием;
DELETE FROM table WHERE id = 1
или
UPDATE table SET status = 'deleted' WHERE id = 1
Как только вы создаете одно и то же поле с одинаковым именем во всех своих таблицах, функция запуска мне не кажется такой уж необходимой.
Комментарии:
1. Извините, я случайно отредактировал ваш ответ вместо моего. Просто откатил его. Приятно видеть, что наши ответы почти одинаковы. Поэтому я не заметил :).
Ответ №3:
Вам всегда нужно сделать запрос из кода вашего приложения к вашей базе данных, чтобы реализовать ваш вариант использования приложения. Является ли это фактическим оператором УДАЛЕНИЯ для строки или оператором ОБНОВЛЕНИЯ, который устанавливает статус «удалено», на самом деле не имеет значения. Вы не можете обойти это с помощью какого-либо триггера.
Ответ №4:
Это зависит от того, чего вы пытаетесь достичь..
Если вам больше никогда не понадобится строка после ее удаления, вам следует просто удалить ее — обновление столбца статуса на самом деле мало что для вас сделает. С точки зрения производительности, вероятно, будет лучше, если вы физически удалите строку (в зависимости, конечно, от фактической структуры вашей базы данных)..
Если вам нужно сохранить запись после ее удаления, вы можете создать архивную таблицу, в которую вы записываете копию записи при удалении ее из своей основной таблицы. Копия будет записана триггером при удалении..
В любом случае вам всегда придется вызывать базу данных, либо для удаления записи, либо для обновления статуса на удалено..