Я бы использовал отдельную таблицу, потому что тогда у вас может быть уникальный идентификатор, который указывает на все другие дочерние записи, которые также являются PK таблицы, что, я думаю, снижает вероятность возникновения проблем с целостностью данных. Например, у вас есть Мэри Джонс, у которой есть записи в таблице адресов, таблице адресов электронной почты и в таблице оценки производительности и т. Д. Если вы добавите запись изменений в основную таблицу, как вы собираетесь связать всю существующую информацию? С отдельной таблицей истории это не проблема.
С удаленным полем в одной таблице вы должны иметь неавгенерированный идентификатор лица и автоматически сгенерированный идентификатор записи.
У вас также есть возможность забыть использовать предложение where Удалено = 0, где необходимо почти для каждого запроса. (Если вы используете поле удаленного флага, сделайте себе одолжение и установите представление с удаленным где = 0 и потребуйте, чтобы разработчики использовали представление в запросах, а не в оригинальной таблице.)
В поле удаленного флага вам также потребуется триггер, чтобы гарантировать, что одна и только одна запись помечена как активная.