Подтвердить что ты не робот

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

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

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

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

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

-Adeena

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

1st - не используйте 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.

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

- Пользователи таблицы

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

Что касается размера текста, я думаю, что на него был дан ответ.

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

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

Ответ 3

Пришлось перекликать с двумя факторами:

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

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

Ответ 4

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

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

EDIT: Вот список из (многих) отличий.

Ответ 5

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 s
    • Это то, что я вижу в качестве основного ограничения

Ответ 6

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

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

Ответ 7

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

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

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

Для просмотра других сравнений между VistaDB и SQL CE посетите страницу сравнения. Также см. SO-поток в Преимущества VistaDB для получения дополнительной информации.

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

Ответ 8

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

Ответ 9

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