
Оптимизация клиентского приложения
От того, каким образом организован доступ к удаленной БД во многом зависит, насколько эффективно будет работать с ней данное приложение.
Минимизация соединений е сервером.
Для соединения с удаленной БД в клиентском приложении следует использовать компонент TDataBase для интерфейса BDE или компонент TADOConnection для интерфейса ADO.
Эти компоненты используются для:
создания постоянного соединения с БД;
создания локального псевдонима БД;
изменения параметров соединения, установленных для псевдонима БД;
управления транзакциями.
Компоненты TDataBase и TADOConnection позволяют установить единственное соединение с удаленной БД. Вообще, установить соединение с сервером может любой компонент TDataSet, однако каждое такое соединение потребляет системные ресурсы и их расход может сказаться на эффективности доступа. Кроме того, при соединении с удаленной БД напрямую из компонентов типа набора данных невозможно изменить установленные раже параметры соединения.
Еще одним способом уменьшения количества соединений с источником данных является использование специальной формы в приложении C++Builder – DataModule. DataModule используется для централизованного хранения невизуальных компонентов доступа к данным.
Использование TQuery.
Для доступа к удаленной БД целесообразнее использовать компонент TQuery вместо TTable по следующим причинам:
При доступе к табличным данным компонент TTable считывает все записи удаленной таблицы, а TQuery — столько, сколько необходимо для текущих целей (например, для вывода в TDBGrid). При доступе к таблицам большого объема использование TTable может привести к существенным временным задержкам
Компоненты TQuery и TTable имеют изначально различную природу:
TTable ориентирован на навигационный метод доступа к данным, что более характерно для локальной СУБД TQuery - на работу с множеством записей, что характерно при доступе к удаленной БД в архитектуре клиент-сервер;
TTable позволяет обратиться к одной таблице, TQuery - к множеству таблиц БД;
Подтверждение изменения данных в TTable происходит для каждой записи, в TQuery изменение происходит сразу же для нескольких записей (Insert, Update, Delete).
При использовании TQuery можно выполнить различные SQL операторы, как возвращающие (Select), так и не возвращающие данные (Insert, Update, Delete).
Перенос вычислительной тяжести на сервер.
При работе с удаленной БД следует стремиться перенести всю тяжесть вычислительной работы на сервер, оставив клиентскому приложению лишь работу по реализации интерфейса с пользователем, передачи запросов к серверу и интерпретации полученных данных.
Рекомендации:
Не стоит обращаться к серверу с запросом на большой объем данных, на который придется накладывать фильтр в клиентском приложении;
Следует реализовать ограничения на значения вводимых пользователем данных при помощи аппарата ограничений БД (CONSTRAINT), а ссылочную целостность - с помощью триггеров.
Запросы, требующие при своем выполнении циклических или разветвляющихся алгоритмов, различные вычисления значений, основанные на текущих значениях данных из БД, следует выполнять в виде хранимых процедур.
С помощью триггеров стоит реализовать и БП, связанные с транзакционными изменениями таблиц;
Повторяющиеся действия, которые могут разделяться различными приложениями и использоваться в SQL-операторах, можно реализовать с помощью функций пользователя.
Таким образом, перенос тяжести вычислительной работы на сервер позволяет:
Повысить скорость работы клиентских приложений;
Минимизирует возможность возникновения ошибок.
Определение БП. Преимущества и недостатки.
БП задают ограничения на значения данных в БД и определяют механизмы, согласно ктр
При изменении одних данных изменяются другие, связанные с ними в этой же или другой таблицах БД. БП определяют условия поддержания целостности БД. Архитектура клиент-сервер предполагает размещение БП на сервере.
Преимущества БП:
- Гарантия целостности БД, т.к. условия БП сосредоточены в одном месте
- Автоматическое применение БП, сосредоточенных на сервере для любых приложений
- Отсутствие различных реализаций БП в различных клиентских приложениях(Create)
- Быстрое срабатывание БП, т.к. нет необходимости пересылать данные клиентам
- Доступность изменений БП на сервере, т.е. нет необходимости повторного распределения изменения данных на клиентах
Недостатки БП:
- Отсутствие у клиентских приложений возможности реагировать на некоторые ошибочные ситуации, возникающие на сервере при реализации БП
- Недостаточность языка SQL, языка хранения процедур и триггеров для реализации БП, удовлетворяющих всем требованиям
На клиентских приложениях реализуются только те БП, которые трудно/невозможно реализовать на сервере, а все остальные переносятся на сервер.
БП для ограничений на значения столбцов
- Ограничения первичного ключа. Требует уникального значения столбца или группы столбцов входящих в первичный ключ
- Ограничение требуемого значения. В поле не может храниться пустое значение.
- Ограничение уникального ключа. Требует уникальности значения столбца или группы столбцов входящих в уникальный ключ.
- Ограничение ссылочной целостности определяется требования, согласно которым для каждого значения внешнего ключа дочерней таблицы должен найтись первичный ключ в родительской таблице.
- Значение по умолчанию. Указывается значение, которое будет занесено в поле по умолчанию при отсутствии интерактивного ввода.
- Ограничение диапазона вводимых значений
- Требование соответствия одному значению из списка
- Ограничение максимального и минимального значения. Указывает, что в поле может храниться значение не больше максимального и не меньше минимального.
- Алгоритмы вычисления значений указывает, что значения одного столбца может быть вычислено по значению другого
- Ограничение отношения между столбцами
- Ограничение формата записи. Указывает, что в значении столбца должна входить группа символов
- Требование вхождения символов в значение, указывает, что в значении должна входить группа символов независимо от её местоположения
- Требования отношения значения столбца со значениями другой таблицы. Значение столбца находится в некотором отношении со значениями, получаемыми из другой таблицы путем выполнения запросов.
CONSTRAINT – устанавливает ограничение на ссылочную целостность и задает имя при её создании
- Требование отношения столбца значения столбца со всеми или некоторыми значениями другой таблицы (All – все, SOME – некоторые).
- Требование существования хотя бы одной записи другой таблицы.
- Требования существования единственной записи другой таблицы, устанавливает что в другой таблице должна существовать единственная запись удовлетворяющая некоторому условию.
БП для ограничений на значения столбцов c использование ссылочной целостности
Автоматически срабатывают при изменении БД
Могут использоваться:
- При реализации каскадных воздействий в дочерних таблицах в случае изменения и удаления поля связи родительской таблицы.
- Для внесения уникального значения в столбец по которому построен первичный или уникальный ключ
- Внесение изменений в семантические связи таблицы
- Для ведения журнала изменений БД
Реализация БП в компонентах типа набор данных и др. компонентах С++
В компонентах типа набор данных
В этих компонентах бизнес-правила реализуются в следующих обработчиках событий:
- OnNewRecord. Происходит при добавлении новой записи сразу после перехода набора данных в состояние вставки из состояния просмотра, но перед выдачей полей новой записи пользователю для ввода. Обычно используется для присвоения значения по умолчанию.
- AfterCancel BeforeCancel. Наступают до или после выполнения метода Cancel (отказ от выполнения исправлений текущей записи таблицы).
- AfterClose BeforeClose. Возникают до или после закрытия соединения с БД.
- AfterDelete BeforeDelete. Возникают при удалении текущей записи методом Delete.
- AfterEdit BeforeEdit. Возникает до или после начала редактирования записи.
- AfterInsert BeforeInsert. Возникает перед или после вставки новой записи.
- AfterOpen BeforeOpen. Возникает до или после открытия набора данных. BeforeOpen возникает при установке свойства Active в True или при вызове метода Open.
- AfterPost BeforePost. До или после переноса изменений данных, при пересылке записи в БД или буфер.
- AfterRefresh BeforeRefresh. Возникает до или после обновления отображаемых данных методом Refresh.
- AfterScroll BeforeScroll. Возникает до или после перемещения указателя таблицы на новую запись. BeforeScroll наступает при перемещении методами First(), Last(), MoveBy(), Next(), Prior(), Locate().
OnCalcFields.
Вычисляемые поля – поля, отсутствующие в БД, значения которых можно получить по значениям других полей записи. Событие наступает при необходимости заполнения вычисляемых полей. При задании алгоритма расчета/перерасчета вычисляемых полей. Событие возникает когда свойство AutoCalcFields установлено в True, а также: при открытии набора данных; при переходе набора данных в состояние редактирования; при перемещении фокуса с одного компонента, отображающего данные, на другой; при модификации текущей записи; при получении записи из БД.
- OnDeleteError. Возникает при ошибке удаления записи
- OnEditError. Ошибка при редактировании или вставке записи.
- OnUpdateError. Возникает при ошибке пересылки кэшированных изменений в БД.
- Свойство CONSTRAINED компонента TQuery. Если оно True, то оно предотвращает ввод записей, неудовлетворяющих условию Where оператора Select.
- Свойство CONSTRAINTS. Содержит массив допустимых для ввода значений данных. Эти значения являются объектами типа TСheckConstraints и задаются интерактивно в редакторе массива. В случае попытки ввода значений, неудовлетворяющих списку, выводится системное сообщение или сообщение из свойства ErrorMessage.
В других компонентах
Бизнес правила можно реализовать с помощью компонент, обрабатывающих несение какого либо значения в поле БД, перемещение по записям табл., блокировку клавиш при возникновении ошибочной ситуации:
1)Проверка правильности значений свойства Text компонента TEdit. Проверка на соответствие формата поля можно осуществить с помощью события ONexit, ктр. возникает, когда компонент TEdit теряет фокус ввода.
2)Запрет подтверждений изменений в БД. В случае невыполнения каких либо усл. на форме блокируется кнопка, реализующая запоминание изменений в БД.
3)Отмена выхода из формы или осущ. каких либо действий . В случае изменения какого либо значения и до выполнения какого либо условия в форме м.б. запрещена какая либо кнопка. Из такой формы можно выйти с помощью Alt+F4, поэтому предусмотреть в форме выход системного меню и запрет Alt+F4. Реализуется в событии OnDatachange компонента TDataSource. Происходит изменение набора данных в режиме просмотра или при изменении какой либо записи в режиме просмотра.
Минимизация обращений к серверу.
Для соединения с удаленной БД в приложении следует использовать компонент TdataBase. Он используется для:
1.Создания постоянного соединения с БД.
2.Создания локального псевдонима БД.
3.Изменения параметров соединения, установленных для псевдонима БД.
4.Управления транзакциями.
Кроме TdataBase к БД можно обратиться с помощью компонентов TStoredProcedures, TQuery, Ttable, но они при активизации создают автономное соединение с БД.
Компонент DataBase подключается к БД один раз, а к нему подключаются компоненты типа «набор данных» через имя БД. Большое число обращений к БД ведет к затратам системных ресурсов, что сказывается на эффективности работы ИС.