Разработка таблиц для удаленных данных - PullRequest
2 голосов
/ 08 марта 2011

У меня есть много таблиц, в которых данные должны быть «помечены для удаления», но не удалены, или переключаться между опубликованными и скрытыми данными.

Наиболее интуитивно понятным способом обработки этих случаев является добавление столбца в базу данных deleted int(1) или public int(1). Это поднимает вопрос о том, чтобы не забывать указывать WHERE deleted=0 для каждого доступа к этой таблице.

Я решил преодолеть это путем создания дублирующих таблиц для удаленных / неопубликованных данных, таких как article => article_deleted и перемещения данных вместо их удаления. Это обеспечивает 2 проблемы:

  1. Ограничения по внешнему ключу оказываются чрезвычайно раздражающими для поддержки
  2. Количество таблиц со скрытым содержимым удваивается (в моем случае ~ 20 становится ~ 40 таблиц)

Моя последняя идея - создать копию всей базы данных с именем unreleased и перенести туда данные.

Мой вопрос не о безопасности управления данными, а о ... как правильно это сделать с самого начала?

Ответы [ 3 ]

3 голосов
/ 08 марта 2011

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

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

В целомсохраните столбец удаления и требуйте от ваших кодеров большего.

ОБНОВЛЕНИЕ:

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

0 голосов
/ 08 марта 2011

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

Сказать «Удалить неактивные записи» имеет смысл, но сказать «Удалить удаленные записи» просто сбивает с толку.

0 голосов
/ 08 марта 2011

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

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

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