Мы столкнулись с похожей ситуацией несколько лет назад, но с самого начала знали, что однажды нам придется переключиться на SQL SERVER, поэтому весь код был написан для работы с клиентом Access с базами данных как Access, так и SQL-сервера.
Идея «одношаговой» миграции на SQL-сервер, безусловно, является более простым способом управления этим на стороне базы данных, и для этого существует множество инструментов. Но в зависимости от того, как ваше клиентское приложение взаимодействует с базой данных, ваш код может работать неправильно. Если, например, ваш код включает в себя множество SQL-инструкций (или генерирует их «на лету», например, добавляя фильтры к инструкциям SELECT), ваш синтаксис может быть несовместим с «сервером SQL»: доступ к подстановочным знакам, датам, функциям, не будет работать на сервере SQL.
В дополнение к этому, как сказал @mjv, другим недостатком одноразового перехода на MS SQL является то, что вы унаследуете многие проблемы из исходной базы данных: неправильные или несоответствующие имена полей, несоответствующие политики первичного/внешнего ключа, скрытые отношения «один ко многим», которые вы хотели бы реализовать в новой модели базы данных и т. д.
Я предложу здесь некоторые принципы и правила для реализации решения «мягкого перехода», которое явно лучше всего подходит вам. Сразу скажу, что это будет непросто, но определенно очень интересно, особенно при работе с 300 столами! Повезло тебе!
Я предполагаю, что у вас есть возможность обновлять клиентский код, и вы предпочитаете всегда сохранять один и тот же клиентский интерфейс. Конечно, во время перехода можно иметь два разных интерфейса, по одному для каждой базы данных, но это будет сильно сбивать пользователей с толку и станет для них постоянным источником разочарования.
По моему мнению, лучшее решение сильно зависит от:
- Оригинальная технология подключения и способ управления данными в коде вашего клиента: доступ к связанным таблицам, ODBC, ADODB, набору записей, локальным таблицам, источникам записей форм, пакетное обновление и т. д.
- Возможность разделить ваши таблицы и ваше приложение на «в основном независимые» модули.
И вы не пожалеете следующих обязательных мероприятий:
настройка процедуры переноса из базы данных Access на SQL сервер. Вы можете использовать уже существующие инструменты (Мастер увеличения доступа очень плохой, поэтому не стесняйтесь покупать настоящий, например SSW или EMS SQL Manager, очень мощный) или создать свой собственный с помощью Visual Basic. Если вы планируете внести некоторые изменения в определение данных, вам определенно придется написать код. Имейте в виду, что вы будете запускать этот код много-много раз, поэтому убедитесь, что он включает все инструкции по экономии времени, которые позволят вам перезапускать процесс с самого начала столько раз, сколько вы хотите. При импорте данных вам придется выбирать между двумя основными стратегиями импорта данных:
a - DELETE existing record, then INSERT imported record
b - UPDATE existing record from imported record
Если вы планируете перейти на новые типы первичного/внешнего ключа, вам придется отслеживать старые идентификаторы в вашей новой модели базы данных в течение переходного периода. Не стесняйтесь переключаться на первичные ключи GUID на этом этапе, особенно если вы планируете реплицировать данные на нескольких сайтах на днях.
Эта процедура переноса будет разделена на модули, соответствующие «логическим» модулям, определенным ранее, и вы должны иметь возможность запускать любой из этих модулей независимо (разумеется, имея в виду, что они, вероятно, должны быть реализованы в определенном порядке, где модуль «клиенты» должен запускаться перед модулем «выставления счетов»).
реализовать в коде вашего клиента возможность подключения как к исходной базе данных ms-access, так и к новому серверу MS SQL. В идеале вы должны иметь возможность управлять из своего кода обоими подключениями для отображения и проверки данных.
Эта возможность будет реализована модулями, где у вас будет для каждого из них «пробный период», т.е. возможность выбора во время тестирования между соединением доступа и соединением sql при использовании модуля. После завершения тестирования модуль можно запустить в монопольном режиме SQL-сервера.
В течение периода передачи, который может длиться несколько месяцев, вам придется программно управлять ограничениями базы данных, которые существуют между модулями «SQL-сервер» и модулями «Доступ». Возвращаясь к нашему примеру с клиентами/выставлением счетов, модуль клиентов будет сначала переключен на MS SQL. Прежде чем можно будет переключить модуль выставления счетов, вам придется программно реализовать отношение «один ко многим» между клиентами и счетами, где каждая из таблиц будет находиться в другой базе данных. Такое ограничение можно реализовать в форме «Счет-фактура», заполнив поле со списком «Клиенты» набором записей «Клиенты» с сервера SQL.
Мое предложение состоит в том, чтобы создавать ваши модули в соответствии с вашей моделью базы данных, всегда начиная с таблиц «один» или ваших отношений «один ко многим»: основные списки, такие как «Единицы», «Валюты», « Страны», должны быть переключены в первую очередь. Вы получите первый практический опыт написания кода для передачи данных и управления вторым подключением в клиентском интерфейсе. Затем вы сможете «подняться» в своей модели базы данных, переключив таблицы «продукты» и «клиенты» (где единицы измерения, страны и валюты являются внешними ключами) на новый сервер.
Удачи!
person
Philippe Grondier
schedule
09.02.2010