Необходимо также отметить, что встроенное ключевое слово является только запросом. Компилятор может принять решение не встроить его, аналогично компилятор может принять решение сделать функцию встроенной, который Вы не определили как встроенный, если это думает, что компромисс скорости/размера стоит того.
Это решение обычно принимается на основе многих вещей, таких как установка между оптимизируют для скорости (избегает вызова функции), и оптимизируйте для размера (встраивание может вызвать чрезмерное увеличение размера кода, так не является большим для больших неоднократно используемых функций).
с VC ++ компилятор Вы можете сверхъязь это решение при помощи __forceinline
ТАК в целом: Используйте встроенный, если Вы действительно хотите иметь функцию в заголовке, но в другом месте существует мало точки потому что, если Ваша попытка получить что-нибудь от нее, хороший компилятор будет заставлять ее встроить для Вас так или иначе.
Заменить таблицу представлением, которое скрывает неактивные элементы.
Или напишите триггер на DELETE, который создает резервную копию строки в архивной таблице.
Вы можете использовать триггер, который срабатывает при удалении записей для их резервного копирования в какую-то таблицу кладбища.
Вы можете использовать столбец isDeleted и определить представление, которое выбирает все столбцы, кроме isDeleted, с условием isDeleted = false. Тогда пусть все ваши stps работают только с видом.
Вы можете вести таблицу истории, где вы делаете резервную копию записи и отметки времени
Одна из основных причин для не удаления данных заключается в том, что они могут потребоваться для связи - например, пользователь может решить удалить старого клиента из базы данных , но вам все равно нужна запись о клиенте, потому что на нее ссылаются старые счета-фактуры (которые могут иметь гораздо более длительный срок службы).
Исходя из этого, лучшим решением часто является тип столбца IsDeleted в сочетании с представлением (Quassnoi упомянул о разделении, которое может помочь с проблемами производительности, которые могут возникнуть из-за большого количества невидимых данных).
Что ж, если вы использовали SqlServer, вы можете использовать триггеры, которые позволят вам переместить запись в удаленную таблицу.
Вы можете разделить свои таблицы по столбцу DELETED
и определить представления, которые будут включать условие:
… AND deleted = 0
Это сделает запросы по активным данным такими же простыми и эффективный.