У меня есть большая таблица SQL-сервера, которая выглядит примерно так:
ImageId int
Page int
FSPath varchar(256)
ImageFrame int
...
В таблице хранится запись для каждой страницы ряда файлов изображений. Это делается для того, чтобы таблица могла представлять изображения, где каждая страница представлена отдельным файлом, и файлы многостраничных изображений, которые содержат страницы в одном и том же файле. Когда я имею дело с многостраничной настройкой, значение столбца FSPath точно дублируется для каждой страницы в одном и том же документе, который занимает много места (одна эта таблица в настоящее время составляет ~ 5 ГБ). Кажется очень расточительным дублирование данных таким образом, но я не смог найти альтернативное решение, которое меня устраивает.
В шаблоне использования этой таблицы преобладают поиски, основанные на первичном ключе (ImageId / Page) для пути (и других столбцов), но мне также необходимо иметь возможность эффективно обрабатывать вставку новых данных и случайное удаление.
Если я создаю таблицу поиска для элементов пути и вставляю идентификатор элемента пути в таблицу страниц, мне потребуется проиндексировать его как по идентификатору, так и по пути, что повредит сценарию, в котором есть отдельный фрагмент пути для каждой страницы, и усложнить вставку новых данных, где путь может существовать или не существовать в таблице поиска. Кроме того, удаление любой строки в таблице основных страниц потребовало бы очистки соответствующей записи пути, если она больше не используется.
Я надеялся, что смогу создать обновляемое представление объединенных таблиц и позволить SQL Server сделать магию для меня, но я получаю сообщение: представление или функция 'Scrap.dbo.PageView' не могут быть обновлены, потому что изменение влияет на несколько базовых таблиц. Попытка выполнить вставку.
Есть ли разумный способ сделать это, что я просто скучаю или мне не повезло?