В прошлом я участвовал в проекте, где использовался этот подход, и лично я чувствую, что это не лучший подход.Я думаю, что лучше просто удалить записи.Когда у вас есть такой флаг, каждый, кто использует вашу базу данных, должен понимать, что записи, которые существуют в таблице, могут не быть «настоящими» записями, в зависимости от того, установлен ли удаленный флаг.Это просто делает базу данных менее интуитивно понятной и трудной в использовании, на мой взгляд.
Если вы беспокоитесь о производительности, я бы посмотрел на правильное распределение ваших табличных пространств, и вы все равно можете использовать схему разбиения.Вы можете разделить данные по годам и месяцам (если вам нужен этот уровень детализации), чтобы помочь с производительностью.
Но я бы избегал флага удалений.В проекте, над которым я работал, он просто стал настоящей головной болью.Например, что, если кто-то попытается вставить другую запись, точно такую же, как та, которая была «удалена» (удалено здесь означает, что удаленный флаг равен true).Устанавливаете ли вы значение false в существующую запись или вставляете другую новую запись?Если вы вставите новую запись, как вы определите свой первичный ключ в таблице, поскольку теперь у вас есть 2 записи с одним и тем же ключом?Вы делаете deleted
часть ключа?Дело в том, что вам приходится иметь дело со всеми этими нетривиальными проблемами.