Технология Microsoft ADO.NET

       

Элементы работы с СУБД Microsoft Access


Рассмотрим применение концепции реляционных баз данных на практике. Представим себе деятельность туристической фирмы. Очевидно, что для работы необходимо вести какие-то записи. Их можно производить в обычной бумажной тетради, но со временем поиск нужных записей и финансовая отчетность будет представлять довольно рутинную, длительную работу. Итак, необходимо создать электронную базу данных, которая должна значительно облегчить ведение всей статистики. Запускаем Microsoft Access 2003, в главном меню переходим "Файл - Создать", на появившейся панели "Создание файла" выбираем "Новая база данных". Далее указываем директорию, где будет сохранен файл базы данных, называем его "BDTur_firm.mdb" и нажимаем кнопку "Создать". В отличие от других офисных приложений, мы не можем начать работу с базой данных, предварительно не сохранив ее файл. В результате проделанных действий появляется окно базы данных (рис. 1.2).


Рис. 1.2.  Окно базы данных

В заголовке окна базы данных указывается ее формат по умолчанию - Access 2000, обеспечивающий совместимость с программами Microsoft Access 2000 и 97. Если совместимость не важна и требуется получить все преимущества новых версий Access, можно преобразовать базу данных, для чего выбираем пункт меню "Сервис \ Служебные программы \ Преобразовать базу данных \ В формат Access 2002-2003". Мы продолжим работать с форматом по умолчанию.

Если вы закроете приложение, а затем снова продолжите работу, при открытии файла базы данных всякий раз будет появляться предупреждение системы безопасности. Дело в том, что в базе данных Microsoft Access могут храниться макросы, которые при открытии могут выполнить вредоносные действия. Система безопасности защищает, таким образом, от деструктивных действий, возможных при открытии чужого файла базы данных. При работе над своей собственной базой данных эти предупреждения излишни. Для их отключения в главном меню программы выбираем "Сервис \ Макрос \ Безопасность" и на вкладке "Уровни безопасности" отмечаем переключатель "Низкая".
Далее в появившемся диалоговом окне разрешаем выполнение небезопасных выражений. Теперь предупреждения появляться не будут, а для блокирования макросов при открытии чужой базы данных достаточно удерживать клавишу Shift.

Итак, приступим, наконец, к созданию базы данных. Самое сложное при этом - выстроить логическую структуру таблиц, избежать наличия повторяющихся записей, а также обеспечить удобство пользования с учетом специфики работы. В окне базы данных дважды щелкнем на надписи "Создание базы данных в режиме конструктора". В появившемся окне "Таблица1: таблица" предстоит определить названия полей, которые и станут заголовками в этой таблице. Введем следующие названия полей (рис. 1.3).


Рис. 1.3.  Заполнение полей таблицы

При вводе названия поля по умолчанию определяется для него тип данных "текстовый". Для изменения типа следует выбрать нужное значение из выпадающего списка (рис. 1.4). Описания возможных типов данных Microsoft Access приводятся в таблице 1.1.


Рис. 1.4.  Определение типа данных поля

Таблица 1.1. Типы данных Microsoft AccessТип данныхОписание
ТекстовыйТекст или комбинация текста и чисел, например, адреса, а также числа, не требующие вычислений, например, номера телефонов, инвентарные номера или почтовые индексы. Сохраняет до 255 знаков. Свойство "Размер поля" (FieldSize) определяет максимальное количество знаков, которые можно ввести в поле
Поле МЕМОПредназначено для ввода текстовой информации, по объему превышающей 255 символов. Такое поле может содержать до 65 535 символов. Этот тип данных отличается от типа Текстовый (Text) тем, что в таблице даются не сами данные, а ссылки на блоки данных, хранящиеся отдельно. За счет этого ускоряется обработка таблиц (сортировка, поиск и т. п.). Поле типа MEMO не может быть ключевым или проиндексированным
ЧисловойДанные, используемые для математических вычислений, за исключением финансовых расчетов (для них следует использовать тип "Денежный").Сохраняет 1, 2, 4 или 8 байтов. Конкретный тип числового поля определяется значением свойства Размер поля (FieldSize)
Дата/время Значения дат и времени. Сохраняет 8 байтов
ДенежныйИспользуется для денежных значений и для предотвращения округления во время вычислений. Сохраняет 8 байтов
СчетчикАвтоматическая вставка уникальных последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи. Сохраняет 4 байта
ЛогическийДанные, принимающие только одно из двух возможных значений, таких, как "Да/Нет", "Истина/Ложь", "Вкл/Выкл". Значения Null не допускаются. Сохраняет 1 бит
Поле объекта OLEОбъекты OLE1) (такие, как документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звукозапись или другие данные в двоичном формате), созданные в других программах, использующих протокол OLE. Сохраняет до 1 Гигабайта (ограничивается объемом диска)
ГиперссылкаГиперссылки. Гиперссылка может указывать на расположение файла на локальном компьютере либо адреса URL. Сохраняет до 64 000 знаков
Мастер подстановокСоздает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного параметра в списке типов данных запускается мастер для автоматического определения этого поля. Обычно сохраняет 4 байта
<


Применение определенного типа данных позволяет избежать ошибок в работе с таблицами - в поле с форматом даты невозможно ввести значение суммы, а в поле с денежным форматом невозможно ввести дату. Кроме того, для различных данных требуется разный объем памяти, и резервирование полей с однородным составом позволяет значительно уменьшить общий размер базы данных.

Около поля "Код туриста" на рис. 1.2 находится изображение ключа. Это означает, что указанное поле будет первичным ключом для записей в таблице. Для того чтобы сделать данное поле ключевым, следует выделить его, щелкнуть правой кнопкой, а затем в появившемся контекстном меню выбрать "Ключевое поле" (рис. 1.5).


Рис. 1.5.  Установка первичного ключа

Первая таблица готова. Сохраняем ее, называя "Туристы", и закрываем. Аналогичным образом создаем таблицы "Информация о туристах", "Туры", "Сезоны", "Путевки" и "Оплата" (таблица 1.2).

Таблица 1.2. Структура и описание таблиц базы данных BDTur_firm.mdb№НазваниеСтруктура в режиме конструктораВид в режиме конструктораОписаниеИмя поляТип данных
1ТуристыКод туристаСчетчик

Содержит основные сведения о туристе
ФамилияТекстовый
ИмяТекстовый
ОтчествоТекстовый
2Информация о туристахКод туристаЧисловой

Содержит дополнительные сведения о туристе, которые были вынесены в отдельную таблицу - для избегания повторяющихся записей
Серия паспортаТекстовый
ГородТекстовый
СтранаТекстовый
ТелефонТекстовый
ИндексЧисловой
3ТурыКод тураСчетчик

Содержит общие сведения о странах для туров
НазваниеТекстовый
ЦенаДенежный
ИнформацияПоле MEMO
4СезоныКод сезонаСчетчик

Содержит сведения о сезонах - некоторые туры доступны лишь в определенный период
Код тураЧисловой
Дата началаДата/время
Дата концаДата/время
Сезон закрытЛогический
Количество местЧисловой
5ПутевкиКод путевкиЧисловой

Содержит сведения о путевках, реализованных туристам.
Код туристаЧисловой
Код сезонаЧисловой
6ОплатаКод оплатыСчетчик

Содержит сведения об оплате за путевки
Код путевкиЧисловой
Дата оплатыДата/время
СуммаДенежный
<


Теперь в окне базы данных есть несколько таблиц. Обратите внимание на наличие в нескольких таблицах одинаковых полей, например, в таблицах "Туристы" и "Информация о туристах" поле "Код туриста". Их назначение станет ясно немного позже. Приступим к связыванию таблиц. В окне базы данных щелкаем правой кнопкой мыши на чистом месте и в появившемся меню выбираем "Схема данных" (или в главном меню выбираем "Сервис \ Схема данных"). В появившемся окне "Добавление таблицы" выделяем все таблицы и нажимаем кнопки "Добавить" и "Закрыть". В окне "Схема данных" добавленные таблицы можно перетаскивать, располагая удобным способом. Выделив поле "Код туриста" в таблице "Туристы" и не отпуская левой кнопки мыши, перетащим его на поле "Код туриста" таблицы "Информация о туристах" (рис. 1.6).


Рис. 1.6.  Создание связи между таблицами

После отпускания кнопки мыши появляется окно "Изменение связей", в котором отмечаем галочки "Обеспечение целостности данных", "Каскадное обновление связанных полей"" и "Каскадное удаление связанных записей", а затем нажимаем кнопку "Создать" (рис. 1.7):


Рис. 1.7.  Определение параметров связи

Определение этих параметров позволит при изменении записи в одной таблице автоматически обновлять связанные записи в других таблицах. В окне появилась связь между таблицами, которая была создана Microsoft Access (рис. 1.8):


Рис. 1.8.  Связь между таблицами

Эта связь была создана автоматически - так происходит тогда, когда две таблицы имеют одинаковые названия связанных полей и согласованные типы данных, причем хотя бы в одной из таблиц связанное поле является ключевым. Под согласованным типом данных понимается следующее: если ключевое поле имеет тип данных "Счетчик", то соответствующее ему поле в другой таблице должно иметь тип "Числовой". В остальных случаях типы данных должны просто совпадать.

Около полей "Код туриста" обеих таблиц на связи расположено изображение единицы, указывающее на принадлежность связи к отношению "один-к-одному".


Это означает, что одной записи в таблице "Туристы" будет соответствовать одна запись в таблице "Информация о туристах". Существуют также другие типы отношений - "один-ко-многим" и "многие-ко-многим". Отношение "один-ко-многим" далее появится у нас между таблицами "Информация о туристах" и "Путевки" - один турист может приобрести несколько путевок, что и находит логическое отражение в связи между таблицами. Другой возможный тип - "многие-ко-многим", его примером может служить связь между таблицами с преподавателями и предметами: один преподаватель может вести несколько предметов, но и один предмет могут вести несколько преподавателей. Для того чтобы рассмотреть практические примеры типов отношений, полезно открыть учебную базу данных "Борей 2)", входящую в комплект Microsoft Access 2003 (Справка \ Примеры баз данных \ Учебная база данных "Борей"), и отобразить схему базы данных.

В результате определения связей между таблицами должна получиться следующая схема базы данных (рис. 1.9):


увеличить изображение
Рис. 1.9.  Схема данных базы BDTur_firm.mdb

Для дальнейшей работы с базой данных заполним ее вымышленными данными - достаточно будет создать по пять записей в каждой таблице. В окне базы данных дважды щелкнем на таблице "Туристы". Щелкая на значок "+" этой записи, можно отобразить и непосредственно вносить изменения в дочерних таблицах. Дочерние таблицы образуют группу, определенную в структуре базы данных. На рис. 1.10 приведена раскрытая группа таблиц - "Туристы" - "Информация о туристах" - "Путевки" - "Оплата" и соответствующая ветвь в структуре базы данных.


увеличить изображение
Рис. 1.10.  Вложенная группа таблиц "Туристы" - "Информация о туристах" - "Путевки" - "Оплата" и соответствующая ветвь в структуре базы данных



Таблица "Туры" также содержит вложенную группу дочерних таблиц "Туры" - "Сезоны" - "Путевки" - "Оплата" (рис. 1.11).


увеличить изображение
Рис. 1.11.  Вложенная группа таблиц "Туры" - "Сезоны" - "Путевки" - "Оплата" и соответствующая ветвь в структуре базы данных

При взгляде на ветви, приведенные на рис. 1.9 и рис. 1.10, появляется вопрос: почему в таблицах не возникает дочерних групп "Туристы" - "Информация о туристах" - "Путевки" - "Сезоны" - "Туры" (см рис. 1.9) или "Туры" - "Сезоны" - "Путевки" - "Информация о туристах" - "Туристы" (см. рис. 1.10)? Дело в том, что группы образуются при одностороннем переходе от таблицы со связью "один-ко-многим" или "один-к-одному", который условно можно изобразить так (таблица 1.3).

Таблица 1.3. Получение дочерних таблиц
Можно1"Туристы"1 - 1"Информация о туристах"1 -
"Путевки" 1 -
"Оплата"
2"Туры" 1 -
"Сезоны" 1 -
"Путевки" 1 -
"Оплата"
Нельзя1"Туристы" 1 -
"Информация о туристах" 1 -
"Путевки"? -1"Сезоны"? -1"Туры"
2"Туры" 1 -
"Сезоны" 1 -
"Путевки"
-1"Информация о туристах"
-1"Туристы"
А так можно1"Туры" 1 -
"Сезоны" 1 -
"Путевки"
2"Туристы"1 -
"Информация о туристах"1 -
"Путевки"
Образно говоря, если в структуре можно провести линию, не отрывая кончика карандаша от бумаги, от первой таблицы к последней, которые объединены связями "один-к-одному" или "один-ко-многим", то и в режиме таблицы можно будет наблюдать соответствующую вложенную группу.

Вносить данные можно сразу в группу таблиц, одновременно просматривая связанные записи в разных таблицах.

Мы создали базу данных Microsoft Access, которая может применяться для управления туристической фирмой. Непосредственное использование таблиц - простое их открытие и внесение данных - встречается крайне редко: отсутствие интерфейса, а главное - отсутствие защиты от случайных ошибок делает всю работу весьма ненадежной. Тем не менее саму базу данных можно считать готовой серверной частью двухуровневого приложения "клиент-сервер". СУБД Microsoft Access содержит все средства для эффективной разработки клиентской части приложения (форм, отчетов, страниц), рассмотрение которых, однако, выходит за рамки этого курса.

В программном обеспечении к курсу вы найдете файл базы данных Microsoft Access BDTur_firm.mdb (Code\Glava1\BDTur_firm.mdb).


Содержание раздела