Лучшая практика для работы с удаленными строками таблицы? - PullRequest
0 голосов
/ 18 июня 2009

Вот моя ситуация. У меня есть следующие таблицы:

  • Продукт
  • Атрибут продукта ,
  • Продукт заказа (ссылается на идентификатор продукта и идентификатор заказа),
  • Атрибут продукта заказа (ссылается на product_product и product_attribute).

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

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

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

Ответы [ 3 ]

3 голосов
/ 18 июня 2009

Не разрешать «удаление по ошибке» ... просто указывайте флаг «активный» или «неактивный» в качестве столбца в таблице атрибутов продукта.

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

3 голосов
/ 18 июня 2009

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

Конечно, если вы все еще хотите (в некоторых случаях) разрешить это, вы можете отключить проверки foreign_key_.

0 голосов
/ 18 июня 2009

Добавить триггер в таблицу для предотвращения удаления используемых атрибутов?

OR

Добавить удаленный флаг в эту таблицу и установить флаг, а не удалять строку. Добавьте IsDeleted = False к предложению where любых запросов, которые обращаются к таблице атрибутов для выбора.

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