Ваш подход имеет недостатки, так как PK должен быть определением уникальным, и MD5 может генерировать коллизии (дубликаты).
Вместо этого рассмотрите возможность использования суррогатного PK (например, идентификатор или GUID).
Кто-нибудь может предложить лучший способ значительного сжатия длинного строкового значения, что позволит избежать этой проблемы
По определению вы не можете сжимать произвольные строки и поддерживать уникальность.Очевидно, что если строки имеют некоторую структуру, о которой вы знаете, вы можете использовать эти знания для создания алгоритма сжатия для конкретного приложения.
В ответ на комментарии:
У меня также естьпроблема с суррогатными ключами, которые не имеют никакого отношения к сохраняемой дате - плохой дизайн базы данных
Я знаю, что суррогатные против естественных ключей - спорный вопрос, но, конечно, предлагаемый вами хэш MD5 по сути является суррогатным ключом?И в любом случае «весь дизайн - это компромисс», поэтому я бы не назвал дизайн базы данных «плохим» без некоторого контекста.ИМХО, если нет естественного ключа короче, чем 2048 символов, суррогатный ключ вполне может быть хорошим вариантом.
Есть также компромиссы производительности, которые следует учитывать: с суррогатным ПК MD5 или GUID у вас есть потенциал для страницыразделяется по мере того, как новые строки будут вставляться в середину таблицы против конца для идентификатора PK.
По какому определению?
Ключевое слово «произвольно»».Алгоритм сжатия без потерь, такой как ZIP, не гарантирует достижение заданной степени сжатия для всех входных данных - подумайте о попытке заархивировать ZIP-архив.