Каков наилучший способ сохранить большие строки в базе данных? (SQL Compact) - PullRequest
4 голосов
/ 05 апреля 2009

Строка, о которой идет речь, будет полем описания (кулинарного) рецепта, а максимальная длина должна быть такой, с которой 99% пользователей никогда не должны сталкиваться. nvarchar (4000) кажется слишком ограничивающим.

Является ли столбец в таблице SQL даже подходящим местом для этого? Неправильно хранить такое (потенциально) большое значение в таком поле, как это, но, возможно, нет?

Не уверен, что это имеет значение, но .NET 3.5, скорее всего, будет использовать LINQ2SQL.

Редактировать: Используя VS Express Database Explorer для создания таблиц, он сообщает мне, что 4000 - это максимальный размер для nvarchar (похоже, varchar не указан в качестве опции). Это всего лишь ограничение SQLCE и указание на то, что мне придется заняться чем-то другим?

Если это правда, что это ограничение SQLCE, у кого-нибудь есть другая рекомендация? Для проекта с домашним животным мне нужно было бы что-то бесплатное и желательно простое в настройке (желательно как для меня, так и для конечного пользователя, но более важно, чтобы его было легко настроить для конечного пользователя). База данных будет локальной, и производительность не слишком важна.

Ответы [ 6 ]

5 голосов
/ 05 апреля 2009

Вы изучали существующие рецепты? Varchar (4000) даст вам около 400-500 слов, и я уверен, что не во многих рецептах из множества поваренных книг, которые у меня есть, описание длиннее.

VarBinary даст вам 8000 байт, но если вы собираетесь выполнять какой-либо поиск в поле описания с использованием varbinary, может потребоваться приведение или другие операции, которые повлекут за собой снижение производительности.

Наконец, хотя мне это не особо нравится, вы можете нормализовать описания в другой таблице, которая позволит вам установить отношение «один ко многим» и позволит рецепту иметь более одной части описания, которую вы собираете заново. в интерфейсе.

1 голос
/ 05 апреля 2009

Не обязательно рекомендуется, но предоставляется, потому что они всплыли на ум:

Если текст очень редко изменяется после сохранения, вы можете подумать о создании новой таблицы, в которой будут храниться «строки» текста, например:

recipe_id integer,
line_number integer,
line_text nvarchar(80)

В качестве альтернативы, если вам не нужно искать текст рецепта, как насчет простого алгоритма сжатия? Кодировка Хаффмана довольно эффективна для текста и не сильно загружает процессор.

0 голосов
/ 28 октября 2015

ntext - ваша лучшая ставка, поскольку в ней может храниться полмиллиона символов, если она слишком мала, это может быть объединено с другими решениями, такими как разделение строки.

https://technet.microsoft.com/en-us/library/ms172424.aspx

Следует помнить, что максимальный размер базы данных в SQL Compact составляет 4 ГБ, поэтому переход к другому типу базы данных может быть предпочтительнее, если вы собираетесь хранить много этих записей.

0 голосов
/ 18 февраля 2011

Альтернативный подход - сохранить текст в виде файла, а база данных хранит только имя файла.

0 голосов
/ 05 апреля 2009

Я никогда не использовал SQL CE, но посмотрите, поддерживает ли он размер данных VARCHAR (MAX). По сути, он хранит большие объемы текста (до 2 ГБ) вне области ограничения размера строки 800 КБ, но также позволяет использовать '=' и другие операторы предложений WHERE (тип данных TEXT поддерживает только LIKE).

0 голосов
/ 05 апреля 2009

Большинство баз данных SQL достаточно умны, чтобы делать это автоматически для больших VARCHARS и для столбцов TEXT. Вместо того, чтобы выделять пространство для большого столбца при создании строки, данные для каждой строки сохраняются таким образом, что они занимают лишь немного больше места, чем фактическое содержимое (а не максимальный размер).

...