Разделение базы данных MS Access - только таблицы в серверной части? - PullRequest
0 голосов
/ 15 января 2011

Итак, я создаю этот совершенно новый проект в MS Access (2007, но я не думаю, что это имеет значение), и я близок к тому моменту, когда пришло время разделить базу данных для окончательного тестирования иразвертывание.Обычное описание разделенной установки: «Все таблицы в BE, все остальное в FE», но мне интересно, не может ли быть каких-то соответствующих исключений:

  1. Я планируювести одну таблицу данных управления приложениями в СЭ.Это одна строка с информацией, такой как номера версий и название приложения.Это будет скрыто от пользователей.

  2. Продолжая изучать связанные вопросы, я увидел идею маленькой стартовой формы в BE, которая говорит пользователям (приятно) уходить ивместо этого откройте FE.

  3. Мне кажется, что некоторые моих запросов фактически вместо этого будут находиться в BE.Эти конкретные запросы в использовании аналогичны представлениям в SQL Server, то есть они объединяют нормализованные данные в более денормализованное представление и / или выполняют фильтр «первого разреза» для некоторых данных, которые все хранятся вместе, но на самом деле имеютодно существенное отличие.Примером последнего является таблица персонала с запросом BE, который представляет подмножество, находящееся в одном и том же отделе, для дальнейших манипуляций в форме (или запросе FE), которая только связана с членами этогоотдел.

Похоже ли это на разумные практики, или я должен придерживаться раздела "Все столы / все остальное"?

Ответы [ 5 ]

3 голосов
/ 15 января 2011

Это похоже на разумную практику, за возможным исключением № 3.Весь смысл разделения БД Access на front-end / back-end состоит в том, чтобы позволить вам снять front-end где-нибудь еще и поработать над ним, а затем заменить версию, к которой обращаются пользователи, без замены их данных.Все, что вы делаете, что не мешает этой «первичной директиве», должно быть прекрасно.Конечно, если вы хотите изменить внутреннюю схему, различие между внутренним и внешним интерфейсом вам не поможет, но это то, что вы получаете, когда имеете дело с Access, верно?

Возможная проблема с # 3 состоит в том, что вы фактически объединяете любые изменения, которые вам могут потребоваться, чтобы выполнить внутренние запросы с изменениями схемы.Другими словами, если вам нужно каким-либо образом изменить эти запросы, вам нужно перевести внутреннюю базу данных в автономный режим, как если бы вы меняли схему.Если вы уверены, что все в порядке, тогда это не проблема, но вы должны знать, что вы ограничиваете себя таким образом.Насколько это действительно ограничено, зависит от того, что входит в эти внутренние запросы.Если это то, что вам никогда не нужно менять, если базовая схема также не меняется, тогда все будет в порядке.Но если это то, что может потребоваться изменить, потому что пользователь изменил свое мнение о том, как он хочет, чтобы эти данные были представлены, тогда у вас будет немного больше проблем.

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

Невозможно повысить производительность, добавив свои «взгляды» в бэкэнд.Единственные QueryDef, которые должны храниться там, это те, которые вы используете при работе со схемой.Например, во всех моих реплицированных приложениях я храню несколько запросов, которые отображают данные из системных таблиц репликации.Ни один из них не имеет отношения к внешним интерфейсам.

Другими словами, все, что является частью приложения, принадлежит внешнему интерфейсу.С точки зрения Jet / ACE, на самом деле не было бы никакой разницы с точки зрения производительности, но у вас было бы гораздо больше работы, чтобы использовать эти "конечные" представления - вы не можете ссылаться на них как на таблицукак вы можете с видом из источника данных ODBC.

1 голос
/ 16 января 2011

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

Я не согласен с № 1 и сохранением любых локальных настроек в FE.Нет смысла хранить локальную таблицу по сравнению с таблицей с идентификатором пользователя сети в качестве уникального индекса в файле базы данных BE.Идея заключается в том, что замена файла базы данных FE при внесении изменений должна быть максимально простой.Необходимость импортировать настройки каждый раз, когда появляется новая версия FE, - это просто дополнительная работа.Да, вы можете создавать запросы и код для выполнения этой работы, но зачем это вообще беспокоить.

При этом я говорил, что я всегда сохранял только один параметр локально, и это было местоположение файла базы данных бэкэнда.Для этого я использовал INI-файл и вызовы API.Я мог бы использовать ключ реестра или что-то еще.Теперь, когда я делаю заказную работу для клиентов в их сети, это на самом деле не требуется.Это было больше для программного обеспечения термоусадочной пленки, которое люди могли скачать с моего сайта.Который имел мою базу данных в строке соединения связанных таблиц.

Я согласен с # 2, потому что это то, что я делаю.

Как сказал Дэвид, №3 не следует делать, потому что это не приносит никакой пользы.Вам нужны эти запросы в СЭ, где вы будете их использовать

1 голос
/ 15 января 2011

Точка 1: отлично. Таблица версий, действительно, является частью приложения, а не BE. Вы также можете сравнить эту информацию в FE с соответствующей версией в BE, чтобы убедиться, что все обновляются при необходимости.

Точка 2: отлично. Выбей их из бэк-энда. И не забудьте отключить обходной ключ.

Пункт 3: Я бы сказал, нет, никогда. BE - это (а) ваши таблицы (б) отношения. Просто подумайте, что что-то еще вызовет проблемы, если вам нужно изменить его, пока приложение находится в разработке. Он действительно отличается от подхода «клиент-сервер», когда все, что вы объединяете и фильтруете в бэкэнде, является несомненным улучшением производительности, и где вы можете легко изменить представление во время использования приложения (хорошо, я знаю, что некоторые будут реагировать на это, но работает отлично, пока вы осторожны:)

0 голосов
/ 16 января 2011

Я думаю, что трюк должен быть изменен на «Все данные в BE, все остальное в FE». Ваш интерфейс может содержать некоторые таблицы, которые не являются частью вашей «Модели базы данных», но относятся к тому, что я должен назвать вашей «Метамоделью интерфейса»:

  • Простым примером может служить многоязычный интерфейс, в котором все свойства текста и заголовков могут отображаться на разных языках. В этой ситуации у вас может быть локальная таблица \ FE, которая будет содержать все ссылки на свойства заголовка и текста, используемые в вашем приложении.
  • Другим примером является случай, когда меню вашего приложения хранятся в определенной таблице, используемой в качестве источника для генерации меню / панелей команд для конкретной формы во время выполнения. Такая таблица также должна быть в вашем ИП.
  • Таблица «соединений», содержащая различные строки подключения к аналогичным базам данных (таким как учетные базы данных или разные подписчики одного и того же издателя), также должна быть в вашем FE.

Вместо того, чтобы метамодель Front End содержалась в таблицах, встроенных в файл FE mdb, вы также можете хранить эти таблицы в виде XML-файлов. Сначала они распространяются вместе с вашим приложением. Затем можно распространять новые версии этих таблиц (доступные соединения, обновленные переводы и т. Д.) Без распространения полного файла FE.

Следуя этой логике, определения запросов / представлений, безусловно, являются частью метамодели FE, и удержание всех этих представлений в простом локальном XML или встроенной таблице Tbl_View (только 2 поля: представление имени и синтаксис представления) помогает.

...