Стоит ли пометить подпосты для удаления или этого достаточно для основного поста?

0

Я не уверен, что этот вопрос слишком субъективен, но дайте мне знать, если для этого есть более подходящий форум.

У меня три таблицы: Products, Variations и Colors.

Каждая таблица имеет visibility поля, и если она установлена в 1 сообщение видно, если оно установлено на 0 оно скрыто. Products - это родительская таблица, и она имеет отношения к дочерним таблицам Variations и Colors отдельно. Вы можете удалять сообщения из любой таблицы, но если вы удаляете сообщение из таблицы " Products, любая связанная запись из " Variations или " Colors также считается удаленной, независимо от того, установлено ли в поле visibility 1 или 0.

Если продукт удален, лучше всего отсканировать все таблицы и пометить все как удаленные, или достаточно ли просто отметить сообщение в родительской таблице?

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

  • 0
    Сначала решите, говорите ли вы о сообщениях или продуктах, и, пожалуйста, отредактируйте свой вопрос, чтобы соответствовать.
  • 0
    @Damien_The_Unbeliever Я последовательный. Products родительского стола. Сообщения существуют во всех трех таблицах. Пожалуйста, прочитайте еще раз.
Теги:
database

1 ответ

1
Лучший ответ

Если столбец visibility определяет, удалена ли почта, или нет, я думаю, что вы можете использовать ее только в родительской таблице " Products и она не нужна в дочерних таблицах " Variations и Colors. Если между Products и другими двумя таблицами существует связь, вы всегда можете использовать JOIN и знать, что помечено как удаленное.

Например, если у вас есть следующий запрос:

SELECT * FROM 'Products' p 
LEFT JOIN 'Variations' v ON p.product_id = v.product_id
LEFT JOIN 'Colors' c ON p.product_id = c.product_id
WHERE p.visibility = 1;

вы получите данные только для видимых продуктов, и если вы хотите получить удаленные данные из дочерней таблицы, вы можете сделать что-то вроде:

SELECT v.* FROM 'Variations' v 
LEFT JOIN 'Products' p ON v.product_id = p.product_id
WHERE p.visibility = 0;

В последнем запросе вы получите записи из Variations, отмеченные как удаленные.

Заключение

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню