Что такое понятие базы данных, эквивалентное «при удалении пользователя удалить все его сообщения»? - PullRequest
1 голос
/ 29 января 2009

Что такое понятие базы данных, эквивалентное «при удалении пользователя удалить все его сообщения»? И это хорошо?

Другой пример: если ваш сайт является форумом по программированию, вам нужно найти и удалить комментарии, относящиеся к этой теме, прежде чем удалять тему.

Должно ли это обрабатываться автоматически на уровне базы данных?

Ответы [ 4 ]

11 голосов
/ 29 января 2009

каскадное удаление

Я бы не рекомендовал реальное удаление - вместо этого использовать мягкое удаление, которое помечает запись как удаленную - в этом случае вы можете использовать каскадные обновления (или нет, поскольку исходная тема уже помечена как удаленная). *

7 голосов
/ 29 января 2009

Каскадные обновления, обычно используемые вместе со ссылками на внешние ключи. Различные СУБД предлагают различные уровни поддержки.

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

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

0 голосов
/ 29 января 2009

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

0 голосов
/ 29 января 2009

Не уверен, что это то, что вы хотели выяснить, но в MySQL тип вещи (я думаю), о которой вы спрашиваете, называется триггером. Это в основном оператор SQL, который вы связываете с таблицей и действием над этой таблицей; например, вы можете установить инструкцию, которая будет выполняться при удалении записи пользователя, которая будет удалять все комментарии / сообщения / все, что связано с этим пользователем.

см. http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html и ссылки в нем (это, конечно, для MySQL ... другие БД могут отличаться)

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