Я не уверен, что этот вопрос слишком субъективен, но дайте мне знать, если для этого есть более подходящий форум.
У меня три таблицы: Products
, Variations
и Colors
.
Каждая таблица имеет visibility
поля, и если она установлена в 1
сообщение видно, если оно установлено на 0
оно скрыто. Products
- это родительская таблица, и она имеет отношения к дочерним таблицам Variations
и Colors
отдельно. Вы можете удалять сообщения из любой таблицы, но если вы удаляете сообщение из таблицы " Products
, любая связанная запись из " Variations
или " Colors
также считается удаленной, независимо от того, установлено ли в поле visibility
1
или 0
.
Если продукт удален, лучше всего отсканировать все таблицы и пометить все как удаленные, или достаточно ли просто отметить сообщение в родительской таблице?
Я могу видеть преимущество восстановления родительского сообщения и сохранения истории дочерних таблиц, но вы также можете утверждать, что они косвенно удалены и должны быть помечены как таковые, возможно, получить несколько микросекунд во время запроса и, наконец, избежать ошибок, если присоединиться или проверить, что поле видимости отсутствует где-то в коде. Какие-либо другие аргументы, которые вы можете придумать для двух подходов?
Если столбец 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
поэтому просто обновите поле в родительской таблице, и я думаю, что одно и то же поле является избыточным в дочерних таблицах.
Products
родительского стола. Сообщения существуют во всех трех таблицах. Пожалуйста, прочитайте еще раз.