Показаны сообщения с ярлыком MS Access. Показать все сообщения
Показаны сообщения с ярлыком MS Access. Показать все сообщения

среда, 15 февраля 2012 г.

Утилита BatchAccess для MS Access

     BatchAccess - это утилита, написанная под .NET Framework, которая позволяет расширить основные возможности разработчиков по работе с БД MS Access на "низком уровне", то есть - на уровне SQL скрипта.

      Разработчик - Русские Информационные Технологии.
      Сайт - http://www.russianit.ru/software/batchaccess/
      Мне посчастливилось :) работать с версией - 1.4.


      На мой взгляд - довольно полезная вещь. MS Access можно назвать визуально-ориентированной средой проектирования, ведь любой, кому приходилось работать с Access знает, что большая часть процесса проектирования БД реализована посредством работы с пользовательским интерфейсом. Основной недостаток такого подхода к проектированию - часть "кухни" скрыта от разработчика, то есть - физически невозможно получить доступ к SQL коду при выполнении тех или иных манипуляций. В общем, кто работал с Access - те в курсе о чем идет речь.

     Итак, BatchAccess позволяет работать с БД более привычным образом, посредством выполнения SQL-операторов.

Требования
      Для работы приложения требуется соответственно предустановленный .NET Framework (на сайте заявлена минимальная версия .NET Framework 1.1), MDAC и Microsoft Jet Driver 4.0. Наличие самого MS Access, естественно, не требуется.
      Как видно - весьма непритязательные требования к ПО.

Возможности
      Утилита позволяет работать как через консоль, так и через пользовательский интерфейс.
Среди заявленных возможностей по работе с БД присутствуют: создание БД, выполнение скриптов над БД, работа со структурой и данными (создание\получение), экспорт в CSV-файл и др.

Вьювер. Структура БД.

    Работа
      Лично я использовал BatchAccess для получения структуры БД. Используя программный интерфейс это можно сделать следующим образом:

  1) Для того, чтобы открыть существующую БД необходимо выполнить команду меню Database → Select Database и выбрать соответствующий *.mdb-файл в появившемся FileOpenDialog.
  
  2) Далее, для экспорта структуры БД в *.sql-файл необходимо выполнить команду меню Database → Restore Structure Script и, соответственно, задать имя файла в появившемся диалоге.
  
  3) После этого можно открыть *.sql-файл (меню File → Open) и посмотреть скрипт.

sql-скрипт. Структура БД.
      
      На RSDN - http://www.rsdn.ru/article/files/progs/BatchAccess.xml присутствует обширное описание всех остальных возможностей программы, и исчерпывающее описание работы с консольной версией.

вторник, 14 февраля 2012 г.

Self referencing many-to-many на MS SQL Server и Access. Особенности. Часть 1.

  Иногда при разработке БД могут возникать нестандартные случаи, требующие использования особых приемов проектирования. В данном посте я расскажу именно о таком особом случае, с которым мне пришлось столкнуться.

self referencing many-to-many
       Речь пойдет о проектировании структуры БД состоящей из двух таблиц с использованием связи self referencing many-to-many для одной таблицы, и вспомогательной таблицы взаимосвязей типа предок-потомок (если из вышенаписанного ничего не ясно – дочитайте до начала иллюстраций :)). Плюс при всем этом - будут затронуты нюансы обеспечения целостности данных (каскадное удаление\обновление) зависящие от конкретной используемой "платформы".
     Нужно отметить, что данная проблема слабо освещена в сети, и объяснение некоторых нюансов работы конкретной СУБД Access мне так и не удалось найти, возможно, в силу того, что подобные ситуации редко возникают в повседневной практике разработки БД.

Постановка задачи
      Итак, сформулирую рабочую задачу на абстрактном примере:
  Допустим, мы имеем сущность предметной области – минерал. Для максимального упрощения примера, эта сущность будет характеризоваться своим названием и принадлежностью к определенному виду или разновидности. Известно, что каждый минерал может быть:
а) отдельным минеральным видом
б) минеральной разновидностью для одного или (внимание!) нескольких минеральных видов.

     Каким образом можно спроектировать БД, для хранения информации о минералах с учетом ограничений определенных условиями, и обеспечить целостность данных?

Проектирование (Access)
       Исходя из описанных выше условий, можно сделать абсолютно ясный логический вывод о том, что оперировать придется однотипными сущностями.
     Так как и минеральные виды и разновидности – это сущности одного типа, то для хранения информации о них необходимо одно отношение STONES, в котором будут определены поля id, и name. Для хранения информации о взаимосвязях (предок-потомок) между минералами необходимо отношение MTF (сокр. – minerals to forms) с полями stone_id, form_id. Ограничения накладываемые условиями предметной области не позволяют нам использовать еще одно дополнительное поле в таблице STONES для характеристики взаимосвязей между минералами, (так как один минерал может быть предком для нескольких потомков и, в свою очередь, один потомок может иметь нескольких предков), поэтому необходимость наличия отдельного отношения взаимосвязей является абсолютно очевидной.


     Прежде чем перейти к SQL Server, я спроектирую эту БД на Access, чтобы можно было убедиться в возможности построения такой структуры отношений.

   Итак, у нас имеется два отношения STONES и MTF. Целостность отношения MTF обеспечивается составным PK из соответствующих полей stone_id и form_id . Каждая запись в таблице будет уникальной. Отношение STONES будет иметь PK на поле id.

   После завершения проектирования структуры БД можно перейти к схеме данных и приступить к проектированию связей между отношениями. Ссылочная целостность отношений MTF и STONES обеспечивается ограничением FK для каждого из двух полей отношения MTF на PK отношения STONES, однозначно идентифицируя взаимоотношения предок-потомок между ключевыми сущностями.


     После определения последнего из двух FK для отношения MTF мы увидим следующую ужасающую картину:



      Как говорят буржуи: оО WTF? Смотрим код.


CREATE TABLE stf (
    form_id                 Long NOT NULL,
    stone_id                Long NOT NULL,
    CONSTRAINT PrimaryKey PRIMARY KEY (stone_id, form_id)
);

CREATE TABLE stones (
    id                      Long NOT NULL,
    stone_name              Text(80) WITH COMP,
    CONSTRAINT PrimaryKey UNIQUE (id),
    CONSTRAINT PrimaryKey1 PRIMARY KEY (id)
);
  
ALTER TABLE stf
    ADD CONSTRAINT stonesstf FOREIGN KEY (form_id) REFERENCES stones
ON UPDATE CASCADE
ON DELETE CASCADE;


ALTER TABLE stf
    ADD CONSTRAINT stonesstf1 FOREIGN KEY (stone_id) REFERENCES stones
ON UPDATE CASCADE
ON DELETE CASCADE;

        Что же это за таблица STONES_1? Дубликат отношения STONES? Судя по коду – вроде бы нет. В общем, я так и не разобрался, что это за безобразие.
      Лично мне до какой-то степени не очень интересно сколько таблиц нужно нарисовать, чтоб отобразить ограничение внешнего ключа на схеме данных, но любой здравомыслящий проектировщик начнет седеть раньше времени если такое увидит…
Ситуацию удалось немного прояснить следующим образом:



      Я просто разбил отношение STONES на два отношения – STONES и STONEFORMS со связью между ними one-to-one. Как видно по диаграмме, тут все обошлось без фокусов и, видимо, дополнительная таблица на предыдущей диаграмме – это специфика Access-а.
      
      Но самое важное здесь не то, каким образом происходит отображение связей, а то - как они обеспечивают целостность данных. Как видно из листинга кода, ограничения внешних ключей определены с правилами обновления\удаления CASCADE. ч.т.д.

Итог по Access-у
    Итак, как можно видеть, Access позволяет проектировать подобную структуру БД с обеспечением каскадного обновления и удаления данных, чего не скажешь о SQL Server.

Продолжение во второй части...

понедельник, 6 февраля 2012 г.

SQL Server Migration Assistant

MS SSMA
      Microsoft SQL Server Migration Assistant for Access – это бесплатная утилита от Microsoft, которая предназначена для автоматизации процесса миграции БД и переноса данных БД MS Access на MS SQL Server.

       Ознакомиться подробнее и загрузить можно здесь - http://www.microsoft.com/sqlserver/en/us/product-info/migration.aspx

      Последняя версия на момент написания поста - 5.1.1105. В данной версии реализована поддержка миграции БД со всех доступных на сегодняшний день версий Access, начиная с MS Access 97, на версии: SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 и SQL Azure.
      Кроме решения для Access на сайте можно загрузить версии SSMA поддерживающие миграцию для Oracle, MySQL, Sybase.
Требования
      Инструмент разработан для платформ от Windows XP до Windows 7. Для работы необходимо наличие предустановленых Microsoft Windows Installer 3.1, .NET Framework  2.0, DAO 12.0 или 14.0.

Работа
      Работать с SSMA довольно просто. Присутствует интуитивно-понятный информативный пользовательский интерфейс.
      Перед началом работы с SSMA необходимо создать пустую БД на SQL сервере, в которую будет переноситься исходная БД MS Access.

      Простейший сценарий работы можно описать в следующем виде:

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


      Далее – открыть БД MS Access с помощью кнопки “Add Databases” путем открытия .accdb-файла. После открытия, метаданные выбраной БД отобразятся в соответствующем обозревателе.


      Следующий шаг – коннект к экземпляру SQL Server с помощью соответствующей кнопки на панели инструментов. После установки соединения выбраный экземпляр SQL Server отобразится в соответствующем обозревателе метаданных.


      После вышеописанной подготовки можно непосредственно приступить к процессу миграции. В обозревателе Access необходимо конвертировать схему выбраной БД, используя кнопку панели инструментов или контекстное меню.


      Результат процесса конвертации (ошибки/предупреждения/сообщения) отобразится в окне “Output”.
      Далее – неоходимо непосредственно создать все таблицы, представления, триггеры и т.д., которые описаны и загружены в схему создаваемой БД SQL Server. Этот процесс также автоматизирован. В окне метаданных SQL Server необходимо раскрыть ветки: “Ваша БД” → ”Schemas” → “dbo” → “Tables“. Отметить ветку “Tables“ и выбрать в ее контекстном меню пункт  ”Synchronize with Database”.
      После этого появится окно синхронизации. Результат процесса синхронизации (ошибки/предупреждения/сообщения) отобразится в окне “Output”.


      После этого этапа у вас уже будет готовая структура БД без данных.
      Для заполнения созданой БД данными необходимо отметить ветку с названием вашей БД в окне метаданных Access, после чего станет активна кнопка “Migrate Data” панели инструментов (или выбрать соответствующий пункт в контекстном меню отмеченной ветки). Отобразится окно результатов переноса данных.


      Я описал простой сценарий работы с SSMA, но следует сказать, что данный инструмент также предоставляет возможность тонкой настройки различных опций БД, маппинга типов данных и др. нюансов миграции.