Физический по сравнению с логическим / мягкий удаляют записи базы данных?

Неустранимая ошибка: не может использовать возвращаемое значение функции в контексте записи

Это обычно происходит при непосредственном использовании функции с empty.

Пример:

if (empty(is_null(null))) {
  echo 'empty';
}

Это связано с тем, что empty - это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty() должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.

empty, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false. Выражения (например, is_null(null) в примере) всегда будут считаться существующими, поэтому здесь empty проверяет только, равен ли он false. Здесь вы можете заменить empty() на !, например. if (!is_null(null)), или явно сравнить с ложным, например. if (is_null(null) == false).

Вопросы, относящиеся

104
задан Brian Tompsett - 汤莱恩 1 July 2015 в 18:28
поделиться

8 ответов

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

До, если бы это - обычная практика - я сказал бы да, но как с чем-либо, используете ли Вы его, зависит от Ваших бизнес-потребностей.

РЕДАКТИРОВАНИЕ: Мысль о другом disadvantange - Если у Вас есть уникальные индексы на таблице, удаленные записи, все еще поднимет "одну" запись, таким образом, необходимо будет кодировать вокруг той возможности также (например, таблица User, которая имеет уникальный индекс на имени пользователя; удаленная запись все еще заблокировала бы имя пользователя удаленных пользователей для новых записей. Работа вокруг этого, которое Вы могли прикрепить на GUID к удаленному столбцу имени пользователя, но это очень hacky обходное решение, которое я не рекомендовал бы. Вероятно, при том обстоятельстве было бы лучше просто иметь правило, что, как только имя пользователя используется, это никогда не может заменяться.)

67
ответ дан Chris Shaffer 24 November 2019 в 04:11
поделиться

Логические удаления, если плохо обращаются со ссылочной целостностью.

Это - право, думают, чтобы сделать, когда существует временный аспект данных таблицы (допустимый FROM_DATE - TO_DATE).

Иначе перемещают данные в Таблицу Аудита и удаляют запись.

Зато:

Это - более легкий способ откатывать (если вообще возможный).

легко видеть то, что было состоянием в отдельном моменте вовремя.

2
ответ дан pkario 24 November 2019 в 04:11
поделиться

Ре: "Это безопасно?" - который зависит от того, что Вы имеете в виду.

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

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

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

3
ответ дан Ian Varley 24 November 2019 в 04:11
поделиться

Я - большой поклонник логического, удаляют, специально для приложения Направления деятельности, или в контексте учетных записей пользователей. Мои причины просты: часто времена, я не хочу, чтобы пользователь был в состоянии использовать систему больше (так учетная запись добираются, отметили, как удалено), но если бы мы удалили пользователя, мы потеряли бы всю их работу и такой.

Другой общий сценарий - то, что пользователи могли бы быть воссозданы, некоторое время будучи удаляет. Это - намного более хороший опыт для пользователя иметь весь их подарок данных, как это было, прежде чем они были удалены, вместо того, чтобы должными быть воссоздать его.

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

5
ответ дан Jon Dewees 24 November 2019 в 04:11
поделиться

Я обычно использую логические удаления - я ищу им работу хорошо, когда Вы также периодически архивируете от 'удаленных' данных к заархивированной таблице (который может искаться в случае необходимости), таким образом имеющий шанс влияния на производительность приложения.

Это работает хорошо, потому что у Вас все еще есть данные, если Вы когда-либо контролируетесь. При удалении его физически это пошло !

4
ответ дан Galwegian 24 November 2019 в 04:11
поделиться

Логичны, удаляет обычную практику? Да я видел это во многих местах. Они безопасны? Это действительно зависит, они немного менее безопасный тогда, данные были перед удалением их?

, Когда я был Техническим Выводом, я потребовал, чтобы наши команды сохранили каждую часть данных, я знал в то время, когда мы будем использовать все эти данные для создавания различных приложений BI, хотя в то время, когда мы не знали, каковы требования будут. В то время как это было хорошо с точки зрения аудита, поиска и устранения неисправностей и создания отчетов (Это было электронной коммерцией / сайт инструментов для транзакций B2B, и если кто-то использовал инструмент, мы хотели записать его, даже если их учетная запись была позже выключена), это действительно имело несколько оборотных сторон.

оборотные стороны включают (не включая других, уже упомянутых):

  1. Последствия Производительности хранения всех этих данных, Мы для разработки различных стратегий архивирования. Например, одна область приложения была рядом с генерацией приблизительно 1 ГБ данных неделя.
  2. Стоимость хранения данных действительно растет со временем, в то время как дисковое пространство является дешевым, сумма инфраструктуры, чтобы оставаться и управлять терабайтами данных и онлайн и от строки много. Требуется много диска для дублирования, и время людей, чтобы гарантировать, что резервные копии перемещаются быстро и т.д.

, Когда решение использовать логичный, физический удаляет, или архивация, я задал бы мне эти вопросы:

  1. эти данные, которые, возможно, должны были бы быть повторно вставлены в таблицу. Например, Учетные записи пользователей соответствуют этой категории, поскольку Вы могли бы активировать или деактивировать учетную запись пользователя. Если это верно, логическое удаляет имеет большую часть смысла.
  2. там какая-либо внутренняя ценность в том, чтобы хранить данные? Раз так, сколько данных будет сгенерировано. В зависимости от этого я или пошел бы с логическим, удаляют или реализуют стратегию архивирования. Следует иметь в виду, что можно всегда архивировать логически удаленные записи.
25
ответ дан JoshBerke 24 November 2019 в 04:11
поделиться

Это довольно стандартно в случаях, где требуется сохранить историю чего-то (например, учетные записи пользователей как @Jon упоминания Dewees). И это - конечно, прекрасная идея, если существует сильный шанс пользователей, просящих восстановления после удаления.

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

2
ответ дан BQ. 24 November 2019 в 04:11
поделиться

Adventages являются сохранением/увековечиванием данных. disventage был бы уменьшением в производительности, когда запросы или получение данных из таблиц с significal суммой мягких удаляют. В нашем случае мы используем комбинацию обоих: как другие упомянули в предыдущих ответах, мы soft-delete users/clients/customers, например, и hard-delete на items/products/merchandise таблицы, где там дублированы записи, которым не нужно пчеле keept.

0
ответ дан 24 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: