Если вы щелкните правой кнопкой мыши на любой панели в окне Конструктора представления, появится диалоговое окно свойств представления. Оно содержит несколько параметров, которые влияют на способ выполнения запроса для формирования представления. На вкладке
Представление
(View):
Если щелкнуть правой кнопкой мыши в верхней части окна Конструктора и выбрать в контекстном меню команду
Свойства
(Properties), появится диалоговое окно
Свойства
(Properties), имеющее пять вкладок. На них перечисляется ряд свойств таблицы, которые можно просматривать и изменять. Наиболее важны три вкладки:
На вкладке
Связи
(Relationships) отображаются и могут модифицироваться внешние ключи (foreign keys) таблицы, которые отражают ее связи с другими таблицами. Внешние ключи создаются автоматически в процессе задания связей между таблицами на схеме данных.
Поле со списком
Выделенная связь
(Selected relationship) содержит список связей таблицы. Выбрав из этого списка значение, в остальных полях можно увидеть описание выбранной связи.
Поле
Имя связи
(Relationship name) показывает имя данной связи.
Таблица из двух столбцов отображает две стороны связи: слева — имя таблицы и имя поля, которое является первичным ключом; справа — имя таблицы и имя поля, которое является внешним ключом, т. е. содержит значения первичного ключа другой таблицы. Эти таблицы связаны по полю "КодТипа" (Categoryld). Это поле в таблице "Типы" является первичным ключом, а в таблице "Товары" — внешним. Имя связи состоит из трех частей и формируется следующим образом: первым пишется имя таблицы, включающей внешний ключ, затем имя таблицы, содержащей первичный ключ, и перед ними ставится префикс. Префикс зависит от того, на какой стороне оказывается таблица, связи которой мы описываем: если она содержит внешний ключ, то пишется префикс FK_, если она содержит первичный ключ, то пишется префикс РК_. В данном примере получается имя FK_Products_Categories, т. к. мы смотрим связи таблицы "Товары" (Products). Перед именем связи присутствует значок. Значок "бесконечность" указывает, что данная таблица находится в связи на стороне "многие", а значок "ключ" означает, что данная таблица находится на стороне "один". Имя связи формируется автоматически, однако оно может быть откорректировано в поле
Имя связи
(Relationship name).
Для выбранной связи можно изменить поле, которое будет содержать вторичный ключ, выбрав из списка полей таблицы нужное поле. Изменить поле первичного ключа нельзя, это можно сделать только на вкладке
Индексы и ключи
(Indexes/Keys).
Флажки в нижней части вкладки имеют следующие значения.
Кнопки
Создать
(New) и
Удалить
(Delete) используются для создания и удаления связей.
На вкладке
Индексы и ключи
(Indexes/Keys) можно вводить и изменять индексы таблицы, первичный ключ и ограничения типа
уникальность
(флажок
UNIQUE)
.
Первичный ключ устанавливается в таблицах проекта так же, как в таблицах Access: нужно выделить поле или несколько полей и нажать кнопку
Ключевое поле
(Primary Key) на панели инструментов в режиме Конструктора таблицы. Первичный ключ может быть изменен с помощью диалогового окна Свойства (Properties). Для этого нужно выделить в списке
Выбранный индекс
(Selected index) первичный ключ (он имеет префикс РК_). В поле
Тип
(Туре) появится значение
Первичный ключ
(Primary key). В списке
Имя столбца
(Column name) определите поле или несколько полей, которые будут составлять ключ. При этом, если ключ составной, нужно выбирать поля и том порядке, в каком они должны быть в ключе. При выходе из поля Имя столбца (Column name) (при переносе фокуса в любое другое поле) проверяется правильность определения ключа и выдается сообщение об ошибке, если нарушено какое-либо правило.
Поле
Имя индекса
(Index Name) содержит имя индекса. Для первичного ключа это имя состоит из префикса РК_ и имени таблицы.
Флажок
CLUSTERED
для первичного ключа должен быть установлен, т. к. это кластеризованный индекс.
Замечание
Кластеризованный индекс (clustered index) определяет порядок физического следования строк в таблице, поэтому он может быть только один, и его предпочтительнее использовать, если часто приходится выбирать не по одной строке, а по целому диапазону строк — в этом случае кластеризованный индекс работает быстрее, чем некластеризованный. Если этот флажок недоступен, значит, в таблице уже есть поле, в котором определен кластеризованный индекс. Чтобы установить флажок для первичного ключа, нужно сначала снять его в другом поле.
Поле
Выделенный индекс
(Selected index) содержит список всех индексов в таблице. Чтобы добавить новый индекс, нужно:
Чтобы удалить индекс, нужно выбрать его из списка и нажать кнопку
Удалить
(Delete).
Ограничение типа UNIQUE на поле таблицы создается так же, как уникальный индекс, только нужно выбрать переключатель
Ограничение
(Constraint) (он выбирается по умолчанию). Такое ограничение можно ввести для поля, в котором разрешены значения Null, хотя первичным ключом такое значение быть не может.
Параметр
Степень заполнения
(Fill factor) определяет максимальный процент заполнения индексной страницы данными. Этот параметр может влиять на производительность и используется при тонкой настройке приложения, по умолчанию его значение равно 0.
На вкладке
Проверить ограничения
(Check Constraints) можно вводить и изменять ограничения типа проверки (CHECK), описывающие правила проверки значений полей. В поле со списком
Выделенное ограничение
(Selected constraint) можно выбрать одно из ограничений, которые уже введены для таблицы. Каждое ограничение имеет имя, состоящее из трех частей:
Обычно префикс и имя таблицы формируются автоматически, в процессе ввода нового ограничения, последняя часть имени добавляется вручную в поле
Имя ограничения
(Constraint name).
Поле
Выражение для ограничения
(Constraint expression) служит для ввода выражения, которое и определяет ограничение. При написании выражения используется синтаксис языка сервера Transact-SQL, который отличается от синтаксиса SQL Access. (Для справки обращайтесь к разд. "Transact-SQL Reference" справочной системы Access.)
Флажки в нижней части вкладки имеют то же назначение, что и на вкладке
Связи
(Relationships).
Чтобы ввести новое ограничение, нужно нажать кнопку
Создать
(New), ввести выражение в поле
Выражение для ограничения
(Constraint expression) и добавить к значению в поле
Имя ограничения
(Constraint name) имя поля, на которое накладывается ограничение.
Чтобы удалить уже существующее ограничение, нужно выбрать его из списка в поле Выделенное ограничение (Selected constraint) и нажать кнопку Удалить (Delete).
Глава 17. Проекты Microsoft Access 2002 Основные понятия Отличие архитектуры "клиент-сервер" от архитектуры "файл-сервер" Распределение функций в архитектуре "клиент-сервер" Универсальный доступ к данным через OLE DB Общие сведения Компоненты OLE DB Microsoft ActiveX Data Objects (ADO) Установка связи с источником данных посредством интерфейса OLE DB Настольная версия Microsoft SQL Server 2000 Создание проекта Access 2002 Создание проекта с использованием существующей базы данных Создание проекта с новой базой данных Открытие файла проекта Работа с таблицами Определение и изменение структуры таблицы Диалоговое окно свойств таблицы Создание триггеров Работа со схемами базы данных Конструктор баз данных Создание таблицы в окне Конструктора базы данных Изменение свойств существующей таблицы Установление связей между таблицами Создание индексов и ограничений Сохранение и откат изменений в структуре базы данных Создание новой схемы базы данных и добавление в нее таблиц Изменение формы и расположения объектов на схеме базы данных Предварительный просмотр и печать схемы данных Копирование и перемещение таблиц между схемами данных Удаление таблиц из схемы и из базы данных Работа со схемами базы данных в многопользовательской среде Работа с запросами Конструктор запросов Способы объединения таблиц в представлении Группировка записей и суммирование значений в представлении Использование подчиненных представлений Параметры в инструкциях SQL Диалоговое окно свойств представления Создание и применение хранимых процедур Создание и использование определяемой пользователем функции Использование индексированных представлений Сортировка и фильтрация данных в формах и отчетах Повышение производительности приложения "клиент-сервер" Минимизация количества обращений к серверу для доступа к данным Осуществление обработки данных на сервере Ограничение объема загружаемых с сервера данных Повышение производительности при работе с отчетами Повышение производительности при работе с формами Повышение производительности внешней базы данных на SQL Server Выводы |
Группировка записей в представлениях и вычисления с использованием статистических функций, в том числе суммирование, выполняются так же, как в запросах базы данных Access
(см. разд. "Создание запроса с помощью Конструктора"гл. 4).
Вместо строки
Групповая операция
(Totals) в бланке запроса Конструктора запросов в проекте присутствует столбец
Группировка
(Group by). По умолчанию этот столбец скрыт. Для того чтобы вывести его на экран, нужно нажать кнопку
Группировка
(Group By) на панели инструментов. Столбец
Группировка
(Group by) добавляется в бланк представления, и для всех полей, включенных в представление, этому полю присваивается значение
Группировка
(Group by). Можно затем в отдельных строках заменить значение (Group by) необходимыми статистическими функциями (сумма — Sum, среднее — Avg, число значений — Count и т. д.). В результате на нижней панели соответствующим образом изменится инструкция SQL. Чтобы ввести условие на выборку записей, можно использовать две разновидности инструкции SELECT:
Представления SQL Server могут быть проиндексированы, т. е. существует возможность сохранить результаты представления и создать для них индекс. Правда это можно сделать, только если проект Access подключен к Microsoft SQL Server 2000 Enterprise Edition или SQL Server 2000 Developer Edition. Если вы используете Microsoft SQL Server 2000 Desktop Edition, то это сделать нельзя.
Представления индексируются в том случае, если требуется ускорить доступ к данным, возвращаемым этим представлением. Чтобы создать индекс для представления, необходимо:
Замечание
Индекс можно добавить к представлению только в том случае, если вы являетесь владельцем всех его базовых таблиц.
Если теперь открыть окно свойств представления, то вы увидите, что установлен флажок
Привязать к схеме
(Bind to Schema). Это означает, что индексированное представление автоматически получает так называемую
схемную привязку.
После того как такое представление сохранено, SQL Server будет контролировать, чтобы базовые таблицы не были изменены таким образом, что индексированное представление станет некорректным, например, изменено наименование базовой таблицы или наименование столбца базовой таблицы, который включен в результат запроса.
В случае подтверждения схемная привязка и индексы в соответствующих представлениях будут удалены.
Замечание
Выполнить схемную привязку можно для любого представления, установив флажок Привязать к схеме (Bind to Schema).
Подчиненные запросы обычно используются в предложении WHERE для определения условий выборки и в предложении FROM, если нужно определить некоторый результирующий набор в качестве источника данных для представления. Создать представление, содержащее подчиненное представление, можно либо путем ввода инструкции SQL на панели запроса SQL, либо с помощью бланка представления. Если вы недостаточно свободно владеете языком SQL, используйте второй способ.
Сначала создайте подчиненное представление. Для этого, получив на панели запроса SQL необходимую инструкцию и протестировав соответствующий запрос (используя кнопку Запуск (Run) на панели инструментов), скопируйте его в буфер.
Создайте второе представление и вставьте выражение из буфера в предложение FROM или WHERE на панели SQL. Вы можете получить инструкцию SQL, например, такого вида:
SELECT SupplierName, ProductName
FROM Products
WHERE Supplier-ID IN
(SELECT SupplierID
FROM Suppliers
WHERE (Country = 'UK'))
Для того чтобы удобно расположить таблицы в окне Конструктора базы данных, можно щелкнуть правой кнопкой мыши на поле схемы и выбрать в контекстном меню команду
Схема макета
(Layout Diagram).
Можно применить аналогичную операцию для группы таблиц. Для этого сначала необходимо выделить требуемые таблицы. Чтобы выделить группу таблиц, достаточно "нарисовать" мышью прямоугольник вокруг этих таблиц, причем таблицы могут попадать в выделяемую область только частично. Выделенные таблицы можно определить по изменившемуся цвету области заголовка. Затем нужно щелкнуть правой кнопкой мыши по любой из выделенных таблиц и выбрать из контекстного меню команду
Выбор разметки
(Layout Selection).
Масштабировать можно или всю схему, или выделенную группу таблиц. Щелкнув правой кнопкой по окну схемы, нужно выбрать в контекстном меню команду
Масштаб
(Zoom) и указать масштаб отображения схемы в процентах .
Обычно для редактирования свойств таблиц масштаб увеличивают, а для создания связей — уменьшают.
Существует несколько способов представления таблиц на схеме данных, которые обеспечивают различную степень детализации свойств таблиц. До сих пор мы видели только одно представление:
Имена столбцов
(Column names), когда в таблицах показывались только наименования полей. Но в зависимости от того, какие действия выполняются с таблицами, можно выбрать наиболее удобную форму представления. Эти формы описаны в табл. 17.3.
Рассмотрим изменение свойств таблицы на примере таблицы Employees (Сотрудники). Чтобы изменить свойства таблицы в схеме базы данных, нужно сначала изменить форму представления таблицы:
В OLE DB определена иерархия компонентов, каждый из которых является СОМ-объектом (рис. 17.3).
Конструктор баз данных (Database Diagram Designer) обеспечивает графическое представление структуры базы данных SQL Server. Основными объектами схемы являются таблицы и связи. Действия, которые могут выполняться над объектами схемы, можно разбить на две группы:
При сохранении схемы данных и те и другие изменения сохраняются в системной таблице dtproperties.
К действиям, изменяющим структуру данных, относятся:
К действиям, изменяющим только форму представления схемы, относятся:
Рассмотрим эти действия последовательно.
Как видите, оно похоже на окно Конструктора запросов в базе данных Access. На верхней панели размещаются таблицы или запросы (в данном случае представления), являющиеся источником данных. Средняя панель представляет собой бланк запроса, который является трансформацией бланка запроса в базе данных Access (столбцы стали строками, а строки — столбцами). Различие между ними небольшое. Например, появился отдельный столбец Псевдоним (Alias), в котором можно задать псевдоним названия поля. Нижняя панель содержит текст инструкции SQL. соответствующий формируемому запросу.
Не всегда все панели видны на экране. Для управления отображением панелей служат три кнопки на панели инструментов.
Окно Конструктора запросов появляется, когда вы создаете новое представление, редактируете старое или создаете инструкцию SQL в свойстве
Источник записей
(Record Source) формы или отчета с помощью кнопки Построителя. Для добавления таблицы на панель Конструктора используется диалоговое окно
Добавление таблицы
(Show Table), но содержит три вкладки —
Таблицы
(Tables),
Представления
(Views) и
Функции
(Function). Окно
Добавление таблицы
(Show Table) появляется при нажатии на кнопку
Добавить таблицу
(Show Table) на панели инструментов. Создание представления аналогично созданию запроса в базе данных Access, поэтому мы не будем здесь описывать этот процесс полностью, а покажем только отличия от аналогичного процесса в базе данных.
(О создании запросов в базе данных см. разд. "Отбор и сортировка записей с помощью запросов" гл. 4 и разд. "Редактирование и анализ данных с помощью запросов" гл. 8.)
Для того чтобы задать те или иные поля представления, их помечают в таблицах путем установки флажка у каждого поля. Одновременно эти поля появляются в бланке запроса и формируется инструкция SQL на панели SQL. Чтобы выбрать сразу все поля таблицы, нужно установить флажок *
(все столбцы)
(All Columns). Кроме того, поля могут перетаскиваться в бланк запроса мышью, как это делается в окне Конструктора запросов в базе данных Access.
Формирование критериев отбора записей аналогично формированию критериев в базе данных Access, однако выражения подчиняются синтаксическим правилам языка SQL Server.
Таблицы и группы таблиц легко копируются из одной схемы в другую через буфер обмена. При этом можно копировать как отдельные таблицы, так и группы таблиц.
Для перемещения таблиц из одной схемы в другую необходимо открыть на экране сразу обе схемы, выделить нужную таблицу или группу таблиц и перетащить их мышью в новую схему.
С помощью операций копирования и перемещения можно разделить одну большую схему на несколько более простых и, наоборот, из нескольких подсхем создать одну общую схему.
Также через буфер можно копировать поля из одной таблица в другую, причем другая таблица может быть как в той же самой схеме, так и в другой.
Хотя OLE DB является очень мощным интерфейсом для работы с данными, этот интерфейс является низкоуровневым. Для удобства работы с OLE DB, так же как и для ODBC, была разработана объектная модель, которую назвали ADO (ActiveX Data Objects). Эта модель была описана
в разд. "Объектные модели Microsoft Access" гл. 13.
Здесь хотелось бы указать на те достоинства этой модели, которые позволяют говорить о ее ключевой роли в приложениях, связанных с обработкой данных, в ближайшем будущем.
Связь проекта Access 2002 с базой данных на SQL Server осуществляется посредством OLE DB. При доступе к данным из формы, таблицы или страницы доступа к данным OLE DB предоставляет так называемый обновляемый статический набор записей (updateable snapshot recordset), полученный с помощью одного обращения к базе данных на SQL Server. Этот набор записей кэшируется на клиентском приложении. В Access данные загружаются в асинхронном режиме, что позволяет пользователю выполнять другие действия с базой данных в процессе загрузки данных с сервера. Просмотр, фильтрация, сортировка, поиск и обновление данных в форме, таблице или странице доступа к данным производятся с кэшированными на клиентской стороне данными. Таким образом, использование обновляемого статического набора записей минимизирует количество обращений к серверу для доступа к данным.
Архитектура приложения, использующего интерфейсы OLE DB для доступа к данным, представлена на рис. 17.2. Эта архитектура является многокомпонентной. Компоненты доступа к данным делятся на три категории: потребители, провайдеры и сервисные компоненты.
Потребители данных
(Data Consumer) — это любое приложение или компонент, которые используют интерфейсы OLE DB для доступа к данным.
Провайдеры данных
(Data Provider) — это компоненты, которые обеспечивают потребителям доступ к данным через строго специфицированный набор интерфейсов. Они взаимодействуют с данными и представляют их единообразно в табличном виде, используя абстракцию, называемую
набор рядов (rowsef).
Необходимо ограничить объем загружаемых данных из базы данных на SQL Server, насколько это возможно. Используйте для этого представления, хранимые процедуры, определяемые пользователем функции, фильтры, выполняющиеся на сервере, и предложение SQL WHERE, позволяющее выделить только нужные записи для отображения в клиентском приложении. Следует избегать таких сценариев работы, где пользователю разрешается просматривать весь объем данных.
Рекомендуется ограничить максимальное число возвращаемых запросом или отображаемых в форме записей с помощью специальной кнопки
Максимальное число записей
(Maximum record limit) или свойства
Максимальное число записей
(MaxRecords), которое можно установить в программе VBA или в окне свойств запроса или формы.
Используйте фильтры, выполняющиеся на сервере, прежде чем загружать данные с сервера, и фильтры, выполняющиеся на клиенте, чтобы ограничить объем отображаемых данных. Для формы или отчета можно установить фильтр с помощью свойства
Серверный фильтр
(ServerFilter). Увеличить быстроту загрузки списков значений можно, установив подходящее значение свойства
Применение автофильтра
(FilterLooknp) (элемента управления для отображения ограниченного набора значений, загружаемых с сервера или с другой рабочей станции.
Открыв таблицу в режиме Конструктора, вы увидите, что способ отображения структуры таблицы незначительно отличается от принятого в режиме Конструктора таблиц базы данных Access (рис. 17.7). В верхней части Конструктора появились два новых столбца:
В данном разделе мы рассмотрим основные понятия модели "клиент-сервер".
Независимо от того, как определяется понятие архитектуры "клиент-сервер" (а таких определений в литературе много), в основе этого понятия лежит распределенная модель вычислений. В самом общем случае под
клиентом
и
сервером
понимаются два взаимодействующих процесса, из которых один является поставщиком некоторого сервиса для другого.
Здесь и далее в книге речь будет идти о частном случае архитектуры "клиент-сервер", а именно о приложениях баз данных, в которых сервером является мощная реляционная СУБД, такая как Microsoft SQL Server (back-end), а клиентом — приложение, созданное в среде Access 2000, которое использует данные с сервера (front-end).
Чтобы осуществить обработку данных на сервере, используйте хранимые процедуры, определяемые пользователем функции и инструкции SQL, а также выполняйте сортировку данных на сервере перед загрузкой их с сервера. Сортировка данных на сервере выполняется с помощью хранимой процедуры, определяемой пользователем функции или предложения SQL, заданного в свойстве
Источник записей
(RecordSource) формы или отчета (это предложение выполняется на сервере).
Файл проекта Access открывается аналогично файлу базы данных. Однако, в отличие от файла базы данных, файл проекта всегда открывается в монопольном режиме. Если вы пытаетесь открыть файл, который уже открыт другим пользователем, он откроется в режиме "только для чтения". Тем не менее и в этом режиме можно работать с объектами, размещенными на сервере (изменять, удалять, создавать новые объекты). Запрещается только модифицировать объекты, находящиеся в самом файле проекта. Для примера можно открыть файл NorthwindCS.adp, который размещается в папке Samples при установке Access 2002. При первом открытии данного файла Access может автоматически создать базу данных на SQL Server. Для этого используется файл сценария установки NorthwindCS.SQL, который находится в той же папке Samples. Сначала Access ищет настольную версию SQL Server на локальном компьютере, и если найдет, то спросит вас, хотите ли вы создать на нем новую базу данных "NorthwindCS". Если на локальном компьютере сервер не найден, то Access попросит ввести имя удаленного сервера, имя пользователя и пароль. После этого исполняется сценарий установки базы данных на соответствующем сервере, и файл проекта NorthwindCS.ADP соединяется с новой базой данных "NorthwindCS".
Окно проекта представлено выше. В списке таблиц вы видите те же таблицы, что и в базе данных "Борей" (Northwind). Однако эти таблицы хранятся не в файле проекта, а на сервере. Хотя значок таблицы выглядит так, как если бы это были локальные таблицы. На панели объектов проекта Access 2002 по сравнению с базой данных Access 2002 появился новый ярлык —
Схемы баз данных
(Database Diagrams). Соответствующие новые объекты также размещены на сервере. Все остальные объекты (кроме страниц доступа к данным) находятся в файле проекта.
Такое приложение от сетевого многопользовательского приложения, которое рассматривалось в предыдущей главе, отличается только тем, где конкретно ведется обработка данных.
Сетевое многопользовательское приложение строится по принципу файл-серверной архитектуры. Данные в виде одного или нескольких файлов размещаются на файловом сервере. Файловый сервер принимает запросы, поступающие по сети от компьютеров-клиентов, и передает им требуемые данные. Однако обработка этих данных выполняется на компьютерах-клиентах. На каждом из компьютеров запускается полная копия процессора обработки данных Jet Engine. Любая копия Jet независимо управляет файлами MDB, содержащими данные. Единственная связь между этими независимыми действиями — файл блокировок (файл, который имеет имя, совпадающее с именем файла приложения, но с расширением Idb), который обязательно создается для каждого файла базы данных с расширением mdb. При этом каждая копия Jet выполняет изменения индексов, работу с системными таблицами и другие функции, входящие в компетенцию СУБД.
В архитектуре "клиент-сервер" сервер базы данных не только обеспечивает доступ к общим данным, но и берет на себя всю обработку этих данных. Клиент посылает на сервер запросы на чтение или изменение данных, которые формулируются на языке SQL. Сервер сам выполняет все необходимые изменения или выборки, контролируя при этом целостность и согласованность данных, и результаты в виде набора записей или кода возврата посылает на компьютер клиента.
Недостатки архитектуры с файловым сервером очевидны и вытекают главным образом из того, что данные хранятся в одном месте, а обрабатываются в другом. Это означает, что их нужно передавать по сети, что приводит к очень высоким нагрузкам на сеть и, вследствие этого, резкому снижению производительности приложения при увеличении числа одновременно работающих клиентов. Вторым важным недостатком такой архитектуры является децентрализованное решение проблем целостности и согласованности данных и одновременного доступа к данным. Такое решение снижает надежность приложения.
Архитектура "клиент-сервер" позволяет устранить все указанные недостатки. Кроме того, она позволяет оптимальным образом распределить вычислительную нагрузку между клиентом и сервером, что также влияет на многие характеристики системы: стоимость, производительность, поддержку.
В представлении параметры использовать нельзя, однако их можно использовать в инструкциях SQL. которые являются источниками записей в формах и отчетах. То есть можно в свойстве
Источник
записей (RecordSource) формы или отчета ввести предложение SQL, которое содержит один или несколько параметров. Эти параметры будут либо запрашиваться у пользователя при открытии формы, либо устанавливаться равными текущему значению заданного элемента управления формы. Покажем на примере, как создаются такие формы. Возьмем форму "Products" (Товары) и будем выбирать в ней только те продукты, цена которых выше заданного значения. Это значение и будет параметром.
Некоторые рекомендации по повышению производительности форм в клиентском приложении.
Существует ряд правил, соблюдение которых позволяет повысить скорость печати отчетов. Наряду с перечисленными ниже советами полезно проверить конкретные отчеты с помощью анализатора быстродействия.
Существует набор общих правил, относящихся к приложениям "клиент-сервер", которые нужно соблюдать, чтобы уменьшить нагрузку на сеть и увеличить производительность приложения. Эти правила таковы: необходимо перенести по возможности обработку данных на сервер, минимизировать количество обращений к серверу (roundtrip) для доступа к данным и ограничить объем данных, загружаемых с сервера.
Полные сведения о повышении производительности баз данных на SQL Server можно найти в документации к SQL Server. Здесь приведены лишь некоторые рекомендации по повышению производительности.
Если схема данных содержит большое количество таблиц и не помещается на одну страницу, Access разбивает ее на страницы. Перед печатью можно просмотреть, как выполняется разбиение. Для этого нужно выполнить команду меню
Схема, Просмотреть разрывы страниц
(Diagram, View Page Breaks). Тогда на схеме появляются синие разделительные линии и номера страниц. Перемещая объекты, можно добиться, чтобы они целиком помещались на странице, а меняя форму представления, получить тот вид схемы, который обеспечит нужную степень детализации информации.
После того как вы убедились, что вид схемы вас удовлетворяет, выберите команду
Файл, Печать
(File, Print), чтобы напечатать эту схему.
Если вы откроете одну из таблиц, например "Товары" (Products), то увидите, что форма представления таблицы почти не изменилась. Появились только две дополнительные кнопки справа от кнопок навигации. Одна из них (крайняя справа) используется для задания максимального числа записей, которые будут передаваться с сервера. Это значение отображается в небольшом диалоговом окне. Вы можете ограничить передаваемое число записей, введя требуемое значение в текстовое поле
Максимальное число записей
(Max Record Count). Еще одна кнопка (вторая справа) подсвечивается красным цветом в процессе передачи записей. С помощью этой кнопки можно прервать процесс передачи записей с сервера. Заметим, что такой возможности явно не хватает в базе данных Access. Когда запрос выполняется достаточно долго, вы не можете прервать этот процесс.
Рис. 17.6. Отображение таблицы, хранящейся на SQL Server, в проекте Access 2000
Запросы в проектах Access являются более сложным понятием, чем в базах данных Access. Это понятие включает несколько разных объектов SQL Server: Представления (Views), Сохраненные процедуры (Stored Procedures) и Функции, определенные пользователем (User-defined Function). Все эти объекты могут быть созданы с помощью Конструктора запросов.
Схемы баз данных
(Database Diagrams) — это тип объектов, который присутствует только в проектах Access. Они являются аналогом схемы данных в базах данных Access, однако в проектах Access это понятие существенно расширено.
Во-первых, таких схем в одном проекте может быть несколько. Это значит, что всю совокупность таблиц можно разделить на логические области и построить для каждой из них свою схему данных. Это очень важно, т. к. количество таблиц в базе данных на сервере может быть очень велико, и, если разместить их все на одной схеме, она может быть просто необозрима. Кроме того, могут быть созданы схемы данных для определенных целей, когда нужно выделить и выразить специфический взгляд на подмножество таблиц базы.
Во-вторых, сам инструментарий для создания схем баз данных более богат: он позволяет не только определять связи между существующими таблицами, но и изменять структуру и свойства таблиц, создавать новые таблицы и т. д. В этом смысле он является альтернативой обычному способу описания таблиц — с помощью режима Конструктора.
Вы можете выполнять операции как с отдельным объектом этой структуры, так и с группой объектов. Причем все изменения, которые вносятся в структуру базы данных, не сохраняются не сервере до тех пор, пока вы не сохраните измененную схему. Это удобно, когда нужно внести много изменений. Тогда сохранить можно только конечный результат, когда вы убедились, что все изменения согласованы.
Схемы базы данных хранятся на SQL Server, и несколько пользователей могут работать с одной схемой, если они имеют на это права. При этом, когда вы попытаетесь сохранить изменения в схеме базы данных, может оказаться, что другой пользователь сделал изменения в схеме или в базе данных, которые не были отражены в вашей схеме. Access сообщит вам о такой ситуации. В этом случае вы можете выполнить одно из трех действий:
Если вы решили сохранить сделанные вами изменения в базе данных, то происходит следующее:
Процесс разработки таких систем достаточно сложен и одной из наиболее важных задач является как раз решение о том, как функциональность приложения должна быть распределена между клиентской и серверной частью. Пытаясь решить эту задачу, разработчики получают двух-звенные, трехзвенные и многозвенные архитектуры. Все зависит от того, сколько промежуточных звеньев включается между клиентом и сервером.
Основная задача, которую решает клиентское приложение, — это обеспечение интерфейса с пользователем, т. е. ввод данных и представление результатов в удобном для пользователя виде, и управление сценариями работы приложения.
Основные функции серверной СУБД — обеспечение надежности, согласованности и защищенности данных, управление запросами клиентов, быстрая обработка SQL-запросов.
Вся логика работы приложения — прикладные задачи, бизнес-правила — в двух-звенной архитектуре распределяются разработчиком между двумя процессами: клиентом и сервером (рис. 17.1).
Сначала большая часть функций приложения решалась клиентом, сервер занимался только обработкой SQL-запросов. Такая архитектура получила название "толстый клиент — тонкий сервер". Появление возможности создавать на сервере хранимые процедуры, т. е. откомпилированные программы с внутренней логикой работы, привело к тенденции переносить все большую часть функций на сервер. Сервер становился все более "толстым", а клиент — "утоньшался". Такое решение имеет очевидные преимущества, например его легче поддерживать, т. к. все изменения нужно вносить только в одном месте — на сервере. Однако язык, на котором пишутся хранимые процедуры, не является достаточно мощным и гибким, чтобы на нем было удобно реализовывать сложную логику приложения.
Тогда возникла тенденция поручить выполнение прикладных задач и бизнес-правил отдельному компоненту приложения (или нескольким компонентам), которые могут работать как на специально выделенном компьютере — сервере приложений, так и на том же компьютере, где работает сервер базы данных. Так возникли трехзвенные и многозвенные архитектуры "клиент-сервер". Появилось специальное программное обеспечение (ПО) промежуточного слоя, которое должно обеспечить совместное функционирование множества компонентов такого многокомпонентного приложения. Такие приложения являются гибкими, масштабируемыми, но сложными в разработке.
Далее в данной главе мы будем говорить только о двухзвенных приложениях "клиент-сервер", в которых клиент, реализованный на базе Access 2002, непосредственно обращается с запросами к серверу базы данных. Промежуточное ПО в данном случае только транслирует эти запросы и результирующие наборы записей между клиентом и сервером и не реализует никаких функций приложения.
Сервисы
(Services) — это дополнительные компоненты, которые обеспечивают функции, не реализованные провайдером OLE DB. Они являются как потребителями OLE DB данных, так и провайдерами. Примером сервиса может быть процессор запросов, который может объединять табличную информацию от разных OLE DB провайдеров и обеспечивать доступ к результирующим данным через OLE DB-интерфейс.
Функционирование компонентов может реализовываться как разными процессами, так и на разных компьютерах через сетевые протоколы, такие как DCOM (Distributed Component Object Model — Распределенная компонентная модель объектов) или HTTP. При этом для выполнения распределенных транзакций может использоваться координатор распределенных транзакций, например Microsoft Transaction Server (MTS).
П
Источники данных
(Data Source) — объекты, которые реализуют подключение к источнику данных: Они определяют нужный OLE DB-провайдер, проверяют права доступа потребителя данных и инициируют соединение с источником данных.
Замечание
Следует различать объект — источник данных и источник данных, который фактически содержит данные.
Замечание
Если база данных создается на SQL Server 6.5, то появятся дополнительные окна мастера, в которых нужно ввести названия и размеры устройств для базы данных и журнала транзакций, а также размеры базы данных и журнала транзакций.
При создании нового проекта можно не устанавливать соединение с базой данных на сервере сразу, а выполнить подключение позже. Для этого в диалоговом окне Data Link Properties необходимо нажать кнопку Отмена (Cancel). Присоединить базу данных на сервере к существующему проекту Access 2002 можно с помощью команды меню Файл, Подключение (File, Connection). Эту же команду можно использовать также для соединения проекта с другой базой данных. Чтобы подключить проект Access 2000 к базе данных на сервере, выберите команду меню Файл, Подключение (File, Connection) и введите необходимые параметры соединения в диалоговое окно Data Link Properties.
Значение в столбце
Длина
(Lengh) может изменяться пользователем только для текстовых полей, в остальных случаях это значение устанавливается по умолчанию при выборе типа данных и не может быть изменено. Раскрывающийся список в столбце
Тип данных
(Data Type) содержит значения, отличающиеся от типов данных, принятых в базах данных Access. Это типы данных для Microsoft SQL Server.
Столбец
Описание
(Description) — эквивалент поля
Примечание
(Comment) в Access — отображается только для SQL Server 2000.
Остальные свойства полей таблицы отображаются на вкладке
Столбцы
(Columns) в нижней части окна Конструктора. Описание этих свойств приведено в табл. 17.1.
Для того чтобы увидеть остальные свойства полей таблицы, вызовите диалоговое окно свойств, нажав кнопку Свойства (Properties) на панели инструментов, и раскройте вкладку Столбцы (Columns).
Вставьте в таблицу новое поле, которое будет содержать идентификатор подразделения, в котором работает сотрудник. Для этого выделите поле Title (Должность) и нажмите клавишу <Ins> или кнопку Добавить строки (Insert rows) на панели инструментов. Появится пустая строка над строкой Title. Введите имя нового поля Departmentid и тип данных int. После этого можно снова изменить представление таблицы на стандартное — Имена столбцов (Column Names).Замечание
Обратите внимание, что как новые таблицы, так и измененные, помечаются-на схеме звездочкой в области заголовка таблицы.
Если вы не хотите сохранять в базе данных те изменения, которые были внесены в структуру при работе со схемой данных, достаточно на вопрос
Сохранить изменения макета или структуры схемы '<имя схемы>'?,
который будет задан при закрытии окна схемы данных, нажать кнопку Нет (No). Произойдет откат всех изменений.
Замечание
При сохранении изменений, внесенных в схему базы данных, не всегда удается просто перенести все изменения в таблицы на сервере из-за ограничений сервера (например, в таблицах SQL Server нельзя поменять порядок полей). В этом случае таблица сначала удаляется из базы данных, а потом создается заново. Кроме того, если изменения вносятся в таблицу, которая связана с другими таблицами, то изменения могут затронуть и связанные таблицы. В этом случае в списке, который отображается в диалоговом окне Сохранить (Save), могут появиться таблицы, которые вы явно не изменяли.
Сохранение изменений, которые выполнены в структуре таблиц и связей в схеме базы данных, выполняется после закрытия окна схемы. При этом выдается диалоговое окно
Сохранить
(Save), в котором перечисляются все измененные объекты. Пользователь имеет возможность проконтролировать, какие объекты подлежат изменению, и принять решение о том, сохранять или нет внесенные изменения. Можно даже сохранить информацию об измененных объектах в текстовом файле. Для этого нужно нажать кнопку
Сохранить как текст
(Save Text File). Текстовый файл, полученный при сохранении внесенных нами изменений, представлен на рис. 17.9.
В нашем достаточно беглом обзоре проектов Access нельзя не остановиться еще на двух вопросах:
Фильтровать данные лучше с помощью предложений SQL и хранимых процедур, на которых базируются формы и 'Отчеты. Если нужно, используйте в них параметры. Еще один способ — определить так называемый
серверный фильтр.
Для этого необходимо задать значение свойства
Серверный фильтр
(Server Filter) формы или отчета. Свойство
Серверный фильтр
представляет собой строковое выражение, определяющее условие выборки. Фильтр сохраняется в форме или отчете и при загрузке формы в ней будут отображаться только отфильтрованные записи.
Если вы хотите изменять фильтр каждый раз при загрузке формы, необходимо присвоить значение Да свойству
Серверный фильтр по форме
(ServerFilterByForm). В этом случае при загрузке появится диалоговое окно, в котором можно задать условия отбора записей. После этого необходимо нажать кнопку
Применить серверный фильтр
(Apply Server Filter) на панели инструментов. При этом введенные условия сохраняются в свойстве
Серверный фильтр
(Server Filter) формы и показывается форма с отфильтрованными записями.
Замечание
Нельзя применять серверный фильтр в формах или отчетах, которые созданы на основе хранимой процедуры.
Уже после того как записи отфильтрованы на сервере, можно их еще раз отфильтровать локально, используя методы
Фильтр по выделенному
(Filter by Selection),
Изменить фильтр
(Filter by Form) или
Исключить выделенное
(Filter For Input).
Для того чтобы сортировка записей выполнялась на сервере, нужно использовать в качестве источника записей формы (отчета) представление, хранимую процедуру, определенную пользователем функцию или предложение SQL. В противном случае сортировка будет выполняться локально.
Определяемая пользователем функция —
это новый объект Microsoft SQL Server 2000, аналогичный представлению и хранимой процедуре. Отличие ее от упомянутых объектов состоит в том, что она всегда, как и любая другая функция, возвращает некоторое значение. Причем в зависимости от того, какое значение возвращает функция, она относится к одному из трех типов:
Встроенная определяемая пользователем функция
представляет собой инструкцию SELECT, которая возвращает обновляемый набор записей.
Табличная определяемая пользователем функция
может содержать несколько инструкций SQL и возвращает необновляемый набор записей.
Скалярная определяемая пользователем функция
возвращает скалярное значение одного из следующих типов данных: int, decimal, varchar, sql_variant или table.
Встроенные и табличные функции обычно употребляются в предложении FROM инструкции SQL, скалярная же функция может быть использована в любом месте запроса, где разрешено использование имени поля таблицы. Кроме этого, определенная пользователем функция может быть применена в качестве источника данных для формы, отчета и поля со списком в форме, однако она не может быть использована в качестве источника записей для страницы доступа к данным.
Правила создания определенной пользователем функции те же самые, что и для хранимой процедуры. То есть можно использовать для ее создания Конструктор запросов, если она состоит из одной инструкции SELECT, или редактор SQL, если тело функции содержит несколько инструкций SQL. В первом случае вы можете использовать ярлык
Создание функции в режиме конструктора
(Create function in designer) в списке запросов окна проекта. Во втором случае необходимо нажать кнопку
Создать
(New) и выбрать соответствующую строку в списке операций диалогового окна
Новый запрос
(New Query).
Подробнее об определенных пользователем функциях см. документацию по Microsoft SQL Server.
Хранимые процедуры —
основное средство программирования серверной логики. Они представляют собой откомпилированный модуль, написанный на языке Transact-SQL. В коде хранимой процедуры можно использовать не только операции выборки и модификации данных, но и логику ветвления, переменные, вызовы других процедур и некоторые другие средства, характерные для языков программирования высокого уровня. Код процедуры синтаксически анализируется при компиляции, а оптимизированный план выполнения создается при первом вызове процедуры. В отличие от запросов, хранимые процедуры имеют возможность возвращать несколько наборов записей, а также значения.
Для вызова процедуры клиентская программа или другая процедура должны указать имя выполняемой процедуры и передать ей набор входных параметров.
Хранимые процедуры используются в проектах Access везде, где могут использоваться предложения SQL. Они могут служить:
Однако нужно помнить, что хранимые процедуры возвращают необновляемый набор записей.
Хранимая процедура может содержать одну инструкцию SQL, и в этом случае для ее создания можно использовать графический режим Конструктора запросов. Если же она состоит из нескольких инструкций SQL, тогда она создается и изменяется в редакторе SQL.
В первом случае чтобы создать процедуру проще всего щелкнуть по ярлыку
Создание сохраненной процедуры в режиме конструктора
(Create stored procedure in designer). При этом открывается стандартное окно Конструктора запросов, в котором можно создать инструкцию SQL, составляющие тело процедуры. Так же как и представление, хранимая процедура в данном случае может иметь ряд дополнительных свойств. Чтобы отобразить или изменить эти свойства, необходимо открыть окно свойств. На вкладке
Сохраненная процедура
(Stored Procedure) содержится перечень свойств, которые аналогичны свойствам представления. А на второй вкладке можно посмотреть и изменить параметры процедуры.
Для примера воспользуемся хранимой процедурой Exployee Sales by Country.
На вкладке отображается таблица со списком параметров процедуры. Каждый параметр обязательно должен иметь имя и тип данных. Кроме того, для него может быть указано значение по умолчанию. Обратите внимание, что имя каждого параметра начинается со значка @. Но имя параметра не может быть изменено на этой вкладке, так же как нельзя добавить новый параметр. Это делается только в бланке запроса в окне Конструктора или прямо в инструкции SQL.
Для того чтобы создать хранимую процедуру, состоящую из нескольких инструкций SQL, нужно открыть список запросов в окне проекта и нажать кнопку
Создать
(New). В диалоговом окне
Новый запрос
(New Query) следует выбрать элемент
Ввод сохраненной процедуры
(Create Text Stored Procedure) .
Нужно изменить имя процедуры в первой строке шаблона и ввести текст процедуры в соответствии с правилами языка Transact-SQL.
Если в теле процедуры нужно ввести инструкцию SQL SELECT, то можно воспользоваться для этого Конструктором запросов. Установите курсор на строке редактора, в которой должна быть введена инструкция SELECT и нажмите кнопку
Вставить SQL
(Insert SQL) на панели инструментов . Появится окно Конструктора запросов. После того как запрос будет создан, нужно закрыть это окно, подтвердив сохранение изменений инструкции SQL.
Пример использования хранимой процедуры в качестве источника записей вы увидите, если откроете отчет "Employee Sales by Country". В качестве источника записей в этом отчете используется одноименная хранимая процедура. В свойстве
Входные параметры
(Input Parameters) этого отчета описаны два параметра: @Beginning_date И @Ending_date.
При запуске отчета эти параметры будут запрашиваться так же, как и при использовании запроса с параметрами в базе данных Access.
О языке Transact-SQL, используемом в хранимых процедурах, см. документацию по Microsoft SQL Server.
Индексы и ограничения для таблиц в схеме базы данных создаются так же, как это описано ранее
в разд. Работа с таблицами данной главы.
Для создания в таблице индекса или ограничения необходимо открыть диалоговое окно
Свойства
(Properties). Создадим индекс для вновь созданного поля DepartmentID (Код отдела) в таблице Employees (Сотрудники). Щелкните правой кнопкой мыши по таблице Employees в окне схемы базы данных и выберите в контекстном меню команду
Свойства
(Properties) или выделите таблицу Employees и нажмите кнопку
Свойства
(Properties) на панели инструментов. Появится диалоговое окно
Свойства
(Properties). Раскройте вкладку
Индексы и ключи
(Indexes/Keys), нажмите кнопку
Создать
(New) и создайте новый индекс, как это было описано ранее.
Замечание
Индексы и ограничения не отображаются на схеме базы данных.
Новая схема базы данных создается так же, как и любой другой объект базы данных Access — нужно открыть список схем, щелкнув мышью по ярлыку
Схемы баз данных
(Database Diagrams) на панели объектов окна базы данных. Затем нажать кнопку
Создать
(New). Откроется пустое окно Конструктора базы данных и в нем — диалоговое окно
Добавление таблицы
(Show Table) (рис. 17.10). Выделите в списке нужную таблицу и нажмите кнопку
Добавить
(Add). Если в схему добавляются таблицы, между которыми уже установлены связи (определены внешние ключи), то эти связи сразу же отображаются на схеме. Для любой таблицы, размещенной на схеме базы данных, очень легко отобразить все связанные с ней таблицы. Для этого достаточно щелкнуть по этой таблице правой кнопкой мыши и в контекстном меню выбрать команду
Добавить связанные таблицы
(Add Related Tables). Мы это проделали для таблицы "Orders" (Заказы).
Рис. 17.10. Добавление таблиц в схему данных
Замечание
Если вы хотите использовать SQL Server 2000 Desktop Engine, установленный локально, то поля в спецификации соединения должны быть заполнены так, (имя сервера — это имя вашего компьютера или специальный идентификатор local, и имя пользователя — за).
Можно убедиться в правильности задания параметров соединения, нажав кнопку
Test Connection.
Нажмите кнопку ОК. Появится окно проекта Access 2000, очень похожее на окно обычной базы данных Access, однако список ярлыков на панели объектов будет несколько отличаться от традиционного списка объектов базы данных Access.
Замечание
В качестве примера мы используем учебный проект NorthwindCS, входящий в комплект демонстрационных приложений Access 2002. При установке Access 2002 в папке SAMPLES размещается сценарий установки этой базы на Microsoft SQL Server — файл NorthwindCS. SQL. Этот файл содержит набор предложений SQL, которые создают на сервере необходимые таблицы, представления, хранимые процедуры и загружают данные. Этот сценарий можно выполнить на сервере с помощью утилиты SQL Enterprise Manager, которая включена в дистрибутивный пакет любой версии сервера, либо он выполняется автоматически при открытии файла NordwindCS.adp.
Еще одним примером может служить демонстрационная база данных Pabs, которая создается на SQL Server при его установке и содержит данные о книгах, их авторах и издателях.
Выберите ярлык
Проект (новые данные)
(Project (New Database)) в группе
Создание
(New) области задач
Создание файла
(New File). Откроется пустое окно базы данных и запустится Мастер баз данных Microsoft SQL Server (Microsoft SQL Server Database Wizard). В диалоговом окне мастера (рис. 17.4) нужно ввести имя сервера (если Access обнаруживает на локальном компьютере MSDE, то имя сервера автоматически подставляется), имя и пароль пользователя для регистрации на сервере и имя базы данных. После этого нажмите кнопку
Далее
(Next). Если все введено правильно, во втором диалоговом окне мастера нужно только нажать кнопку
Готово
(Finish). После этого появится окно с индикатором процесса создания новой базы "данных на сервере (рис. 17.5).
Сначала откройте в режиме Конструктора как любой другой объект Access схему базы даннйх Relationships (Связи), которая присутствует в проекте NorthwindCS.adp. Для того чтобы создать с помощью Конструктора новую таблицу, нужно:
Триггеры
являются особой разновидностью хранимых процедур, которые активизируются не по прямому вызову пользователя, а при наступлении определенного события в базе данных, а именно — вставки, удаления или модификации записи в таблице. Триггеры привязаны к конкретной таблице. Каждая таблица может иметь до трех триггеров — по одному на каждый вид операции с данными (INSERT, UPDATE, DELETE). Но один триггер может также обрабатывать и два и все три события.
Триггер может быть использован для соблюдения определенных правил модификации данных. При нарушении этих правил он может откатить все произведенные изменения и вернуть данные в исходное состояние. Кроме того, триггер может быть использован для автоматического осуществления каких-либо сопутствующих операций, например ведения журнала изменений данных или автоматического обновления некоторых итоговых значений (например, значения поля, в которое вносится количество сотрудников в фирме).
Чтобы создать триггер для таблицы, нужно:
Для того чтобы изменить или удалить существующий триггер, нужно в диалоговом окне
Триггеры для таблицы
выбрать из списка нужный триггер и нажать кнопку
Изменить
(Edit) или
Удалить
(Delete) соответственно.
Так же как и в запросах в базе данных Access, можно создавать разные типы объединений таблиц:
Существует три типа внешних объединений:
По умолчанию используется внутреннее объединение таблиц. Если нужно изменить тип объединения, щелкните правой кнопкой мыши по линии связи (удобнее всего по ромбику в центре связи) и выберите соответствующую команду в контекстном меню. В представлении "Products by Category" (Товары по типам) (см. рис. 17.36) это будут команды:
Или можно выбрать из контекстного меню команду
Свойства
(Properties) и открыть диалоговое окно
Свойства
(Properties) .
Флажки в группе
Включить строки
(Include rows) позволяют установить любой тип внешнего соединения между таблицами. При изменении типа соединения меняется значок на связи — дополняется ромб справа или слева до квадрата.
Как видно из рис. 17.38, записи в таблицах могут связываться не только по условию равенства связанных полей. Для связи можно использовать любой из операторов сравнения (>, <, >=, <= или о). При изменении оператора сравнения он отображается на значке связи, таким образом, тип связи очень хорошо идентифицируется визуально. Кроме того, когда вы подводите курсор мыши к связи, появляется всплывающая подсказка, указывающая тип объединения, условие объединения и связанные поля .
Свойство
|
Описание
|
Значения по умолчанию
|
||
Значение по |
Значение, которое вставляется в поле, если |
Пусто |
||
умолчанию |
пользователь ничего не ввел в него. Это |
|
||
(Default Value) |
значение игнорируется для полей, имею- |
|
||
|
щих тип данных timestamp. Если значе- |
|
||
|
ние по умолчанию не задано, в поле встав- |
|
||
|
ляется значение Null |
|
||
Число цифр |
Максимальное количество цифр (для чи- |
Зависит от типа дан- |
||
(Precision) |
словых полей), разрешенных для данного |
ных. Например, для |
||
|
поля |
int равно 4 |
||
Точность (Scale) |
Максимальное количество десятичных зна- |
Как правило 0, для |
||
|
ков после разделителя. Это значение должно быть меньше или равно значению |
типа данных money и smallmaney — 4 |
||
|
Precision |
|
||
Идентификация |
Свойство, которое обеспечивает автомати- |
Нет (флажок сбро- |
||
(Identity) |
ческую генерацию уникальных значений в |
шен) |
||
|
этом поле при вставке новых записей |
|
||
Начало иденти- |
Значение, которое присваивается первой |
1 |
||
фикации (Identity |
записи в таблице |
|
||
Seed) |
|
|
||
Шаг идентифи- |
Шаг изменения значений в поле. В каждой |
1 |
||
кации (Identity |
последующей записи значение поля увели- |
|
||
Increment) |
чивается на это число |
|
||
IsRowGuid |
Указывает, является ли данное поле гло- |
Нет |
||
|
бальным идентификатором. В отличие от |
|
||
|
поля, которое имеет значение свойства |
|
||
|
Идентификация (Identity) равным Да (Yes) |
|
||
|
и которое однозначно идентифицирует ка- |
|
||
|
ждую запись в таблице, SQL Server версии |
|
||
|
7.0 и выше позволяет создать поле в таб- |
|
||
|
лице, которое является глобальным иден- |
|
||
|
тификатором, т. е. каждое значение этого |
|
||
|
поля может быть уникальным в пределах |
|
||
всей базы данных или даже во всех базах |
|
|||
данных на всех серверах сети. |
|
|||
Свойство
|
Описание
|
Значения по умолчанию
|
|
|
В этом случае значение данного поля должно быть Да (Yes), но тип данных может быть только uniqueidentif ier |
|
|
Формула
(Formula) |
Показывает формулу для вычисляемого столбца. Только для SQL Server 2000 |
Пусто |
|
Сортировка
(Collation) |
Для текстовых полей позволяет выбрать способ сортировки данных в поле. Только для SQL Server 2000 |
По умолчанию для базы данных |
|
Формат (Format) |
Позволяет задать формат отображения данных в поле. Только для SQL Server 2000 |
Пусто |
|
Число десятичных знаков
(Decimal Places) |
Для числовых полей определяет количество десятичных знаков при отображении данных в поле. Аналог соответствующего свойства в Access. Если установлено значение [Авто] (Auto), то количество отображаемых десятичных знаков определяется значением свойства Формат (Format) |
Авто |
|
Маска ввода
(Input Mask) |
Аналог соответствующего свойства в Access. Только для SQL Server 2000 |
Пусто |
|
Подпись
(Caption) |
Определяет подпись для поля, которая появляется в формах. Только для SQL Server 2000 |
Пусто |
|
Индексация
(Indexed) |
Определяет, будет ли создаваться индекс для данного поля. Только для SQL Server 2000 |
Нет |
|
Гиперссылка
(Hyperlink) |
Указывает, будет ли значение этого поля интерпретироваться как гиперссылка. Только для SQL Server 2000 |
Нет |
|
Режим IME (IME Mode) |
Позволяет задать способ ввода данных в поле при использовании китайского, японского и некоторых других языков. Только для SQL Server 2000 |
Нет |
|
Режим предложений IME (IME Sentence Mode) |
Определяет режим преобразования данных при использовании китайского, японского и ряда других языков. Только для SQL Server 2000 |
Отсутствует |
|
Почтовый адрес
(Postal Address) |
Содержит имя элемента управления или поля, которое отображает почтовый адрес, соответствующий введенному в данное поле почтовому коду, либо штрих-код клиента, соответствующий введенному адресу. Только для SQL Server 2000 |
Пусто |
|
Фуригана
(Furigana) |
Содержит имя столбца таблицы, в котором может храниться Furigana-эквивалент введенного текста. Только для SQL Server 2000 |
Пусто |
|
Типы данных, которые поддерживает SQL Server, приведены в табл. 17.2.
Типы данных
|
Типы данных SQL Server
|
Примечания
|
||
Двоичные |
binary[ (n) ] varbinary [ (n) ] . |
|
||
Символьные |
char[(n) ] varchar [ (n) ] |
|
||
|
nchar nvarchar |
Используются для поддержки Unicode-символов. Только в Microsoft SQL Server 7.0 |
||
Дата и время |
clatetime smalldatetime |
Нет отдельных типов для даты и времени |
||
Числовые с фиксированной точностью (Exact numeric) |
decimal [ (p[, s] ) ] numeric! (p[, s] ) ] |
Не теряют точность за счет округления |
||
Приблизительные число-вые (Approximate numeric) |
floatf (n) ] real |
|
||
Целые |
int smallint tinyint |
4 байта 2 байта 1 байт |
||
Денежные |
money
smallmoney |
|
||
Специальные |
bit timestamp |
|
||
Текст |
text ntext |
Используются для поддержки UNICODE-символов. Только в Microsoft SQL Server 7.0 |
||
Типы данных
|
Типы данных SQL Server
|
Примечания
|
||
Графика |
image |
|
||
Курсор |
cursor |
Можно использовать для выходных параметров процедур Только в Microsoft SQL Server 7.0 |
||
Уникальный идентификатор |
unique identifier |
Соответствует QUID в модели СОМ. Только в Microsoft SQL Server 7.0 |
||
Пользовательские типы данных (user-defined datatypes) |
|
Определяются на базе системных типов данных |
||
Форма представления
|
Описание
|
||
Свойства столбца (Column Properties) |
Представление в виде таблицы свойств. Эта форма удобна для редактирования свойств полей таблицы. Когда создается новая таблица, она отображается на схеме именно в такой форме |
||
Ключи (Keys) | Показываются только первичный и внешние ключи таблицы и столбцы, имеющие ограничение типа UNIQUE | ||
Только имя (Name Only) | Показывается только заголовок таблицы | ||
Новое представление (Custom) |
Показываются свойства полей, но не все, а только выбранные пользователем | ||
Имена столбцов (Column Names) | Показываются только имена полей таблицы и обозначается ключевое поле. В таком виде показывается существующая таблица при добавлении ее в схему данных. Имена полей в этом представлении можно редактировать |
Представление
Новое представление
является настраиваемым. По умолчанию в нем отображаются три столбца: имя поля, тип поля и возможность пустых значений. Чтобы настроить это представление:
Кроме таблиц и связей между ними, на схеме можно создавать надписи, которые могут содержать все необходимые комментарии к схеме. Для того чтобы создать надпись, нужно щелкнуть правой кнопкой мыши на поле схемы и выбрать в контекстном меню команду
Новое название
(New Label). На схеме появляется рамка, в которую можно ввести текст.
Для того чтобы изменить шрифт надписи, нужно щелкнуть по ней правой кнопкой мыши и выбрать в контекстном меню команду Шрифт (Font). Изменение шрифта действует на всю надпись. Нельзя одну часть надписи отформатировать одним шрифтом, а другую — другим.
Чтобы удалить таблицу из схемы данных, нужно выделить эту таблицу и нажать кнопку
Скрыть таблицу
(Hide Table) на панели инструментов или выбрать соответствующую команду в контекстном меню. При этом таблица больше не отображается в схеме базы данных, но не удаляется из самой базы данных. Если таблица была из--менена, то прежде чем удалить ее из схемы, Access запросит, хотите ли вы сохранить изменения в базе данных. Если вы ответите Нет (No), то таблица сохранится в памяти Access в измененном состоянии, и эти изменения перенесутся в базу данных когда вы сохраните схему базы данных при закрытии.
Для того чтобы удалить таблицу не только из схемы, но и из базы данных, нужно выделить эту таблицу и выполнить из контекстного меню команду
Удалить таблицу из базы данных
(Delete Table from Database). При этом таблица на самом деле удаляется из базы данных только тогда, когда вы сохраните схему базы данных, из которой вы ее удаляли. Если не сохранять изменения в схеме данных, то таблица удалена из базы данных не будет.
Интерфейс ODBC был первым средством, которое обеспечило универсальный доступ к данным реляционного типа посредством SQL-запросов. Однако реляционные базы данных не единственный формат хранения данных, а современные приложения требуют интеграции информации из разных источников, не только SQL-ориентированных. Отсюда возникает потребность либо перевести все данные в единый формат, т. е. создать универсальную базу данных, что очень-дорого и неэффективно, либо обеспечить универсальный доступ к данным разных типов без необходимости их преобразовывать и реплицировать.
OLE DB представляет собой разработанный фирмой Microsoft набор интерфейсов OLE, обеспечивающих унифицированный доступ приложений к данным из разнообразных источников, включая текстовые файлы, файлы электронной почты, электронные таблицы, данные мультимедиа и пр.
Основные отличия OLE DB от ODBC состоят в следующем:
При установке на компьютере Microsoft Office XP или отдельного приложения Access 2002 автоматически устанавливаются следующие провайдеры OLE DB:
Для того чтобы посмотреть, какие провайдеры OLE DB установлены на вашем компьютере, необходимо открыть диалоговое окно
Data Link Properties.
Это окно открывается при создании или редактировании специальных файлов — Microsoft Data Link, или файлов UDL (universal data link), в которых хранится информация о конкретном источнике данных OLE DB (тип провайдера OLE DB, сервер, на котором размещаются данные, база данных или файл, в котором они хранятся).
Информация о соединении может храниться и запрашиваться также в том приложении, которое использует интерфейс OLE DB для доступа к данным. В нашем случае таким приложением яапяется проект Microsoft Access, однако о проектах Microsoft Access речь еще впереди, поэтому пока мы опишем только, как работать с файлами связей Microsoft Data Link.
Для того чтобы создать новый UDL-файл, проще всего воспользоваться программой Проводник (Explorer) Windows:
Вкладка
Connection
и следующая вкладка
Advanced
содержат параметры соединения с источником данных. Вид этих вкладок зависит от используемого провайдера OLE DB. Для SQL Server провайдера OLE DB вкладка
Connections
Замечание
Вкладка такого же вида отображается в диалоговом окне Data Link Properties, появляющемся при выборе команды Файл, Подключение (File, Connection) в окне приложения Access 2000 при работе с проектом Access 2002
На этой вкладке нужно определить сервер, с которым будет выполняться соединение, имя базы данных и параметры регистрации на сервере. Можно использовать интегрированную с Windows NT (Use Windows NT integrated security) или стандартную (Use a specific user name and password) схему безопасности. При выборе переключателя
Use a specific user name and password
нужно ввести имя и пароль для регистрации на сервере. Флажок
Blank password
предназначен для использования пустого пароля в строке соединения (connection string). Флажок
Allow saving password
позволяет сохранить пароль в строке соединения. Если используется интегрированная схема безопасности, то подключение к SQL Server будет выполняться с тем именем и паролем, под которым вы зарегистрировались в сети Windows NT. На этой вкладке есть также кнопка
Test Connection,
позволяющая немедленно протестировать соединение с заданными параметрами.
Следующая вкладка
Advanced
позволяет определить дополнительные свойства соединения, например
Connection timeout
. Это время ожидания (в секундах) соединения с источником данных. Если через заданный промежуток времени связь с источником данных установить не удалось, выдается сообщение об ошибке.
Все свойства соединения можно увидеть и отредактировать на вкладке All . Перечень свойств в списке зависит от типа провайдера OLE DB. Для того чтобы отредактировать любое свойство, нужно выделить его в списке и нажать кнопку Edit Value. Появится диалоговое окно Edit Property Value. В поле Property Value можно ввести новое значение свойства, предварительно очистив его при необходимости нажатием кнопки Reset Value
Теперь нужно связать новую таблицу Departments (Отделы) с таблицей Employees (Сотрудники). Для этого щелкните левой кнопкой по области выделения слева от поля Departmentid (Код отдела) таблицы Departments и перетащите появившийся значок поля на одноименное поле таблицы Employees. Появится диалоговое окно
Установить связь
(Create Relationship). В этом окне нужно сбросить флажок
Проверять имеющиеся данные при создании
(Check existing data on creation), т. к. поле Departmentid в таблице Employees заведомо будет пустым. Нажмите кнопку
ОК.
Результат изменений отображается в схеме базы данных. Тот конец связи, который соединен с таблицей, содержащей первичный ключ, помечается значком ключа. Конец связи, который соединен с таблицей, содержащей внешний ключ, может помечаться по-разному:
Если вы подведете курсор мыши к линии связи, то появится метка связи (Связь 'FK_Employees_Departments' между 'Departments' и 'Employees').
Настроить параметры связи можно и с помощью окна свойств. Чтобы открыть это окно, выделите связь на схеме и нажмите кнопку
Свойства
(Properties) на панели инструментов или щелкните по связи правой кнопкой мыши и выберите в контекстном меню команду
Свойства
(Properties). Для вновь созданной связи автоматически устанавливается свойство проверки ссылочной целостности. Эту проверку можно отключить, если сбросить флажок
Применить связь для INSERT и UPDATE
(Enable relationship for INSERT and UPDATE) на вкладке
Связи
(Relationship) диалогового окна
Свойства
(Properties).
Возможно создание на схеме данных рекурсивной связи, т. е. связи между полями одной и той же таблицы. Примером такой связи является связь в таблице Employees между полями Employeeld и ReportsTo. Поле ReportsTo играет роль внешнего ключа, т. к. оно содержит идентификатор сотрудника, перед которым отчитывается данный сотрудник.