SQL Server Express против MS Access

#sql-server #ms-access #sql-server-express

#sql-сервер #ms-access #sql-server-express

Вопрос:

Коллега, с которым я работаю, недавно сказал мне, что SQL Express и MS Access — это, по сути, одно и то же; похоже, это не совсем точное утверждение. Я знаю, что вы можете преобразовать Access в базу данных SQL и, возможно, внешне они похожи, но я бы предположил, что механизм SQL DB и то, что используется для запуска access, не совпадают. Не только это, но и синтаксис инструкции SQL и т.д. Я знаю, что это не одно и то же.

Я в основном пытаюсь понять, чтобы быть более информированным о версиях.

Ответ №1:

Хм, нет, не то же самое.

Прежде всего, мне нужно прояснить некоторую терминологию. MS Access — это средство быстрой разработки приложений (RAD), которое позволяет быстро создавать формы и отчеты, привязанные к реляционным данным. Он поставляется с механизмом базы данных на основе файлов (Jet / ACE).

Доступ к инструменту RAD можно использовать со многими различными внутренними базами данных (Jet, SQL Server, любой БД, поддерживающей ODBC, и т.д.). Я должен предположить, что ваш коллега специально комментировал Jet / ACE, то есть ядро базы данных, которое использует MS Access.

Я думаю, что единственное самое большое различие между ядром базы данных Jet / ACE и MS SQL Server Express заключается в том, что Jet / ACE основан на файлах, а SQL Server Express использует модель клиент / сервер. Это означает, что SQL Server Express требует запущенной службы для предоставления доступа к хранилищу данных. Это может усложнить развертывание в некоторых сценариях.

SQL Server Express на самом деле — это просто урезанная версия SQL Server: максимальный размер базы данных 4 ГБ (10 ГБ в 2008R2), используется только один физический процессор и т.д. Эти ограничения вводятся для того, чтобы крупные организации не могли использовать свободно доступную версию Express Edition вместо полноценной установки SQL Server. Результатом этого является то, что SQL Server Express предлагает действительно простой путь обновления до SQL Server. Это также (вообще говоря) более надежная и полнофункциональная система управления базами данных, чем Jet / ACE.

Сходства

  • системы управления реляционными базами данных
  • написано Microsoft

Различия

  • MS Access
    • На основе файлов
    • свободно распространяемая среда выполнения (2007 или более поздней версии)
    • RAD tools (конструктор форм / отчетов)
    • использует Jet SQL
    • максимальный размер файла 2 ГБ
  • SQL Server Express
    • Модель клиент /сервер
    • Бесплатно
    • нет инструментов RAD
    • использует Transact-SQL
    • максимальный размер базы данных 4 ГБ (10 ГБ для SSE R2), максимум один физический процессор

Комментарии:

1. Также стоит отметить, что SQL Server позволяет создавать триггеры и хранимые процедуры, в то время как Jet / ACE этого не делает. MS Access (как инструмент RAD) на самом деле не предназначен для редактирования или выполнения хранимых процедур, хотя вы можете управлять ими в коде VBA с помощью ADO (ActiveX Data Objects).

2. Хотя у меня не было возможности использовать их для себя, в Access 2010 появились » Макросы данных «, которые похожи на триггеры в SQL Server.

3. На самом деле макросы данных табличного уровня не похожи на триггеры, но их можно использовать для реализации чего-то, что работает так же, как триггеры. Их также можно использовать для других целей.

Ответ №2:

Я думаю, что ваш коллега имел в виду SQL Server CE, который представляет собой сверхлегкую встроенную базу данных, которая по-прежнему (IMO) намного превосходит Access в аспекте управления базами данных. SQL Express нельзя даже сравнивать с Access, не оскорбляя первый.

Комментарии:

1. Что ж, в компактной версии sql Server нет процедур хранения или табличных триггеров, в то время как механизм обработки данных Access по умолчанию теперь имеет. Таким образом, не так уж и сложно обсуждать компактную версию sql server, которая также является обработчиком данных в процессе, таким как access data engine (ACE), и не является сервисом.

2. Или, может быть, SQLite против Access

Ответ №3:

Вот таблицы данных для обоих продуктов, чтобы вы могли увидеть некоторые неопровержимые факты о разнице между двумя базами данных.

Доступ:http://office.microsoft.com/en-us/access-help/access-specifications-HP005186808.aspx

SQL (Экспресс указан в крайнем правом столбце): http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx

Комментарий, который я всегда читал, заключается в том, что Access отлично подходит для использования базы данных single access одним пользователем, как только вы выходите за рамки однопользовательского поиска в другом месте. Хотя это может показаться «немного» натяжкой, Access действительно не очень хорошо работает в многопользовательской среде. По опыту могу сказать, что у нас был клиент, который игнорировал наши запросы на перенос внутренней базы данных с Access на SQL, и было множество случаев, когда нам приходилось восстанавливать из резервных копий или переводить базу данных Access в автономный режим из-за повреждения.

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

Вы можете «масштабировать» базу данных Access до SQL, создав пакет SSIS или другой инструмент для импорта, но для этого потребуется схема Access и данные и перенести их в настоящую базу данных SQL. Это больше, чем просто подключение базы данных Access или тому подобное.

В любое время, когда вам нужна «настоящая» база данных, я бы настоятельно рекомендовал посмотреть любую из версий SQL, доступных через Access.

Комментарии:

1. Идея о том, что Access / Jet / ACE не может работать более чем с одним пользователем, смехотворна. У всех моих клиентов с серверной частью Jet / ACE несколько пользователей одновременно обращаются к хранилищу данных. Если ваше приложение плохо работает более чем с одним пользователем, ЭТО ВАША ВИНА, а не Access.

2. И теряется терминология «реальной» базы данных. Это выставляет вас как ничего не знающего фанатика борьбы с доступом.

Ответ №4:

Просто помните, что с MS-Access у вас нет ограничений по размеру, если вы правильно разыгрываете свои карты. Например, нет причин не иметь множества таблиц объемом от 2 до 4 гигабайт, каждая из которых содержится отдельно в своей собственной базе данных. Ваши ODBC-приложения могут открывать соединение с несколькими базами данных MS-Access и запрашивать одну таблицу в каждой. Таким образом, у вас может быть база данных, содержащая триллионы записей, хранящихся в нескольких файлах MDB. Одна компания, в которой я начал работать, использовала единую базу данных MS-Access для запуска системы отслеживания проблем, выполненной в формах MS-Access. Они могли использовать его только для одного пользователя одновременно из-за проблем с общим доступом, которые привели бы к блокировке MS-Access. Я написал пользовательский интерфейс Windows GUI на языке Win32 Perl для базы данных, который был лучше при проверке полей / записей, и мой ODBC-код был способен управлять подключением для одновременного доступа пользователей. Я управлял открытием, чтением, записью и закрытием базы данных для каждого пользователя с помощью моей программы на Perl. Я не оставил базу данных открытой. Я не поддерживал постоянное соединение для каждого пользователя, а вместо этого поддерживал соединение достаточно долго, чтобы получить запись для редактирования. Затем я закрыл соединение, пока не пришло время записывать запись обратно в базу данных. Кроме того, я написал свою собственную программную логику блокировки записей, поддерживая таблицу входа пользователя, которая содержала идентификатор записи, которую пользователь редактировал в данный момент, а затем удалил эту запись, когда больше не редактировал эту запись. Когда другой пользователь отправлялся редактировать ту же запись, программа проверяла, открыта ли эта запись в данный момент для редактирования другим пользователем. Система работала безупречно. MS-Access никогда не блокировался через ODBC и многопользовательский доступ. Я даже встроил пароль к базе данных в мою скомпилированную программу на Perl, чтобы никто не мог получить доступ к данным в базе данных Access иначе, чем через мою программу на Perl.