Каковы ограничения для SQL Server Compact? (Или - как выбрать базу данных для использования на платформах MS?) - PullRequest
54 голосов
/ 02 января 2009

Приложение, которое я хочу создать с использованием MS Visual C # Express (я готов перейти на Standard, если это потребуется), для которого требуется база данных.

Я был очень взволнован по поводу SQL Server Compact - потому что я не хочу, чтобы люди, которые будут устанавливать мое приложение на своих компьютерах, должны были устанавливать весь SQL Server или что-то в этом роде. Я хочу, чтобы конечный пользователь установил его как можно проще.

Так что я был в полном восторге, пока мне не показалось, что существуют ограничения на то, что я могу сделать с колонками в моих таблицах. Я создал новую базу данных, создал таблицу, и когда я приступил к созданию столбцов, кажется, что нет «текстового» типа данных - просто что-то под названием «ntext», которое, кажется, ограничено 255 символами. "int", кажется, ограничен 4 (я хотел 11). И, похоже, нет функции auto_increment.

Это реальные ограничения, с которыми мне пришлось бы жить? (Или это потому, что я использую «Экспресс», а не «Стандарт»). Если это реальные ограничения, каковы мои другие параметры базы данных, которые соответствуют моим требованиям? (простая установка для пользователя, являющегося важной персоной - я предполагаю, что мой конечный пользователь - просто средний пользователь компьютеров, и если это будет сложно, то разочаруюсь в моем приложении)

-Adeena

PS: я также хочу, чтобы данные моей базы данных были зашифрованы для конечного пользователя. Я не хочу, чтобы они могли напрямую обращаться к таблицам базы данных.

PPS. Я прочитал: http://www.microsoft.com/Sqlserver/2005/en/us/compact.aspx и не увидел обсуждения этих конкретных ограничений

Ответы [ 9 ]

32 голосов
/ 02 января 2009

Я не уверен насчет шифрования, но вы, вероятно, найдете эту ссылку полезной:
http://msdn.microsoft.com/en-us/library/ms171955.aspx

Что касается остального:
«Текст» и «auto_increment» напоминают мне о доступе. Предполагается, что SQL Server Compact совместим с обновлением с выпусками server SQL Server, при этом запросы и таблицы, используемые в вашей компактной базе данных, должны передаваться в полную базу данных без изменений. Имея это в виду, вы должны сначала взглянуть на типы и имена SQL Server , а не на имена доступа: в данном случае это столбцы varchar(max), bigint и identity.

К сожалению, вы заметите, что это не так в отношении varchar (max), потому что Compact Edition еще не имеет тип varchar (max). Надеюсь, они скоро это исправят. Однако тип ntext, который вы просматривали, поддерживает намного больше, чем 255 байт: фактически 2 30 , что составляет более 500 миллионов символов.

Наконец, bigint использует 8 байт для хранения. Вы просили 11. Однако, я думаю, вы можете быть смущены здесь, что размер хранилища указывает количество доступных десятичных цифр. Это определенно НЕ тот случай. 8 байт памяти допускают значения до 2 64 , которые будут вмещать более 11 цифр. Если у вас так много элементов, вам, вероятно, все равно понадобится база данных серверного класса. Если вы действительно хотите думать в терминах цифр, вам также будет предоставлен тип numeric.

17 голосов
/ 06 апреля 2009

Несколько, надеюсь, полезных комментариев:

1-й - не используйте SQLite, если вы не хотите, чтобы во время записи блокировалась вся база данных (http://www.sqlite.org/faq.html#q6), и, возможно, что более важно в приложении .Net, он НЕ является поточно-ориентированным или более точным, чем это должно быть) перекомпилирован для поддержки потоков (http://www.sqlite.org/faq.html#q6)

В качестве альтернативы для моего текущего проекта я посмотрел на Scimore DB (у них есть встроенная версия с поставщиком ADO.Net: http://www.scimore.com/products/embedded.aspx), но мне нужно было использовать LINQ To SQL в качестве O / RM, поэтому мне пришлось используйте Sql Server CE.

Автоинкремент (если вы имеете в виду автоматическое увеличение ключа) - это то, что было всегда - пример таблицы:

- Таблица пользователей

CREATE TABLE Tests (
    Id       **int IDENTITY(1,1) PRIMARY KEY NOT NULL,**
    TestName     nvarchar(100) NOT NULL,
    TimeStamp    datetime NOT NULL
)
GO

Что касается размера текста, я думаю, что ответили.

Вот ссылка на информацию о шифровании от Microsoft Technet: (http://technet.microsoft.com/en-us/library/ms171955.aspx)

Надеюсь, это немного поможет ....

16 голосов
/ 11 сентября 2010

Пришлось учитывать два фактора:

  1. Я часто использую Sql Compact, и он отлично подходит для того, для чего он работает - для одного пользователя, для встроенной базы данных с одним хранилищем данных. Он обладает всеми достоинствами SQL и транзакциями. Параллелизм достаточно хорошо для меня. Обратите внимание, что немногие скептики на этой странице регулярно используют продукт. Не используйте его на сервере, это не то, для чего оно. Многие из моих клиентов даже не знают, что файл является «базой данных», это просто проблема реализации.
  2. Вы хотите зашифровать данные ваших пользователей - предположительно, чтобы они могли просматривать их только из вашей программы. Это просто не произойдет. Если ваша программа может расшифровать данные, то вам нужно где-то хранить ключ, и достаточно выделенный злоумышленник найдет его, и точка.

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

5 голосов
/ 20 мая 2011

ntext поддерживает очень большие текстовые данные (см. MSDN - это для Compact 4.0, но то же самое относится к 3.5 для типов данных, которые вы упоминаете).

int - это числовой тип данных, поэтому размер 4 означает 4 байта / 32 бита памяти (от –2 147 483 648 до 2 147 483 647). Если вы намерены хранить 11 байтов данных в одном столбце, используйте тип varbinary размером 11.

Автоматически увеличивающиеся столбцы в мире SQL Server выполняются с помощью ключевого слова IDENTITY. Это приводит к тому, что SQL Server автоматически определяет значение столбца при вставке данных в строку, предотвращая конфликты с любыми другими строками.

Вы также можете установить пароль или зашифровать базу данных при ее создании в SQL Compact, чтобы запретить пользователям прямой доступ к вашему приложению. См. Защита баз данных в MSDN .

.

Все элементы, которые вы упомянули выше, на самом деле не являются ограничениями, поскольку они понимают, как использовать SQL Server.

Сказав это, существуют некоторые ограничения для SQL Compact.

  • Нет поддержки для NVARCHAR(MAX)
    • NTEXT отлично работает для этого
  • Нет поддержки VIEW с или PROCEDURE с
    • Это то, что я вижу в качестве основного ограничения
5 голосов
/ 02 января 2009

SQL CE для меня загадка. Нужна ли нам еще одна платформа SQL? И это третий за последние несколько лет ориентированный на мобильные платформы от MS ... У меня не было бы большой уверенности, что он будет последним. Насколько я могу судить, технология SQL Server практически не разделяется - это новая технология с нуля.

Я пробовал это, а затем был более успешным с SQLite и Codebase.

РЕДАКТИРОВАТЬ: Вот список из (многих) различий.

3 голосов
/ 02 января 2009

Я несколько раз использовал различные выпуски SQL Server Compact, но только в качестве репозиториев для сбора данных на мобильных платформах - там, где он хорошо работает для синхронизации с базой данных сервера, и с таким сценарием, несомненно, является дополнительным выбор.

Однако если вам нужно что-то большее, чем это, и выступать в качестве основной базы данных для вашего приложения, то я бы предположил, что SQLLite, вероятно, является лучшим вариантом, он полностью надежен, широко поддерживается и встречается во всех местах (используется на например, iPhone), но он на удивление способен (симулятор виртуальной реальности OpenSim использует его в качестве базы данных по умолчанию), и есть множество других (включая Microsoft).

2 голосов
/ 24 января 2011

Согласно этому посту (http://www.nelsonpires.com/web-development/microsoft-webmatrix-the-dawn-of-a-new-era/) говорится, что, поскольку он использует файл базы данных, только один процесс может получить к нему доступ при каждом чтении / записи, и в результате ему необходим эксклюзивный доступ к файлу, также ограничено 256 подключениями, и весь файл, скорее всего, придется загружать в память. Поэтому SQL Server Compact может не подойти для вашего сайта, когда он растет.

2 голосов
/ 16 мая 2009

Я также должен включить здесь VistaDB в качестве альтернативы SQL CE.

VistaDB поддерживает шифрование (Blowfish), также поддерживает TEXT и NTEXT (включая индексы FTS для них).

И да, приведенный выше пост является верным в том смысле, что вам нужно посмотреть на типы SQL Server, чтобы они действительно соответствовали, VistaDB также использует типы SQL Server (мы фактически поддерживаем больше, чем SQL CE; только отсутствует XML). 1007 *

Чтобы увидеть другие сравнения между VistaDB и SQL CE , посетите страницу сравнения. Также см. Раздел SO на Преимущества VistaDB для получения дополнительной информации.

(Полное раскрытие - я владелец VistaDB, поэтому могу быть предвзятым)

1 голос
/ 02 января 2009

Есть ограничения ... Джоэл, кажется, обратился к деталям. SQL CE действительно предназначен для мобильной разработки. Большинство «встроенных» решений для баз данных имеют аналогичные ограничения. Проверить

...