Выбрать главу

В качестве примера реляционной базы данных можно привести поставляемую вместе с Visual Basic базу данных BIBLIO.MDB, содержащую библиографическую информацию о книгах по программированию, их авторах и издательствах, эти книги опубликовавших.

Так как Visual Basic использует ту же систему управления базами данных (MS Jet Engine), что и MS Access, то несмотря на наличие в Visual Basic средств работы со многими форматами БД, все таки в приложениях предпочтительно использовать файлы баз данных в формате MS Access. Эти файлы имеют расширение MDB и здесь в основном будут описаны приемы работы с файлами именно такого формата.

Перейдем теперь к исследованию базы данных с библиографией. Для этого откройте файл BIBLIO.MDB при помощи MS Access или VisData.

Содержимое файла базы данных BIBLIO.MDB показано на рис. 1.2. В базу данных входят таблицы (Tables), запросы (Queries), формы (Forms), отчеты (Reports), макросы (Macros) и модули (Modules). Макросы, формы и модули нам не интересны, так как это вотчина разработчиков, применяющих Visual Basic for Applications или, сокращенно, VBA.

Рис. 1.2. Содержимое файла BIBLIO.MDB

Из рисунка видно, что база данных состоит из таблиц: PUBLISHERS, AUTHORS и TITLES. Каждая из таблиц содержит информацию об объектах одного типа. Из названий таблиц становиться понятно, что данные в каждой таблице принадлежат одной и той же группе объектов. Каждая строка в этих таблицах однозначно определяет один объект из соответствующей группы. Вообще, база данных может состоять из одной или нескольких таблиц. Запись, в свою очередь, состоит из нескольких полей, каждое из которых содержит элемент данных об объекте.

Типы данных, которые можно поместить в таблицу, зависят от формата файла базы данных. В таблице 1.1 приведены некоторые типы данных, которые поддерживаются системой управления базами данных Visual Basic для файлов MS Access.

Таблица 1.1

Название ∙ Описание

Text ∙ Строки алфавитно-цифровых символов. Например, адрес, номер телефона, почтовый индекс и т. п. Текстовое поле может содержать от 0 до 255 символов.

Memo ∙ Длинные строки. Например, комментарии. Максимальный размер ограничен 1.2 Гбайт.

Yes/No ∙ Yes/No, True/False, On/Off, 0 или 1.

Byte ∙ Целые числа в диапазоне от 0 до 255.

Integer ∙ Целые числа в диапазоне от -32768 до +32767.

Long ∙ Целые числа в диапазоне от -2147483648 до 2147483647.

Single ∙ Вещественные числа в диапазоне от -3,4∙1038 до 3,4∙1038.

Double ∙ Вещественные числа в диапазоне от -1.8∙10308 до 1.8∙10308.

Date/Time ∙ Дата и время.

Currency ∙ Используется для обозначения денежных сумм. Запоминаются 11 знаков слева от десятичной точки и 4 знака справа от десятичной точки.

Counter ∙ Длинные целые с автоматическим приращением.

OLE ∙ OLE-объекты, созданные в других программах с использованием протокола OLE. Размер ограничен 1.2 Гбайт.

Binary ∙ Любой двоичный объект размером до 1.2 Гбайт. Этот тип обычно используется для хранения рисунков и двоичных файлов.

Таблица PUBLISHERS (Издатели) содержит информацию об издательствах (имя компании, ее адрес, телефон, факс и др.). На рис. 1.3 и 1.4 показаны структура таблицы PUBLISHERS и ее содержимое в табличном виде.

Рис. 1.3. Структура таблицы PUBLISHERS

Рис. 1.4. Содержимое таблицы PUBLISHERS

Таблица AUTHORS (Авторы) содержит информацию о авторах — ФИО и год рождения. Структура этой таблицы и ее содержимое показаны на рис. 1.5 и 1.6 соответственно.

Рис. 1.5. Структура таблицы AUTHORS

Рис. 1.6. Содержимое таблицы AUTHORS

Таблица TITLES (Заголовки) содержит данные о самих книгах — название книги, год издания, код ISBN, издатель, краткое описание и др. Структура таблицы TITLES и ее содержимое показаны на рис. 1.7 и 1.8 соответственно.

Рис. 1.7. Структура таблицы TITLES

Рис. 1.8. Содержимое таблицы TITLES

Из рис. 1.2 видно, что в базе данных BIBLIO.MDB присутствует еще и таблица TITLE AUTHOR. На первый взгляд непонятно зачем она нужна. Ведь в базе данных есть таблица TITLES с заголовками книг и таблица AUTHORS с данными об авторах. Однако все же эта таблица нужна и для чего она так необходима станет понятно, когда в дальнейшем будем рассматривать отношения между таблицами.

Отношения между таблицами

Отношения между таблицами устанавливают связь между данными находящимися в разных таблицах базы данных.

Отношения между таблицами определяются отношением между группами объектов соответствующего типа. Например, один автор может написать несколько книг и издать их в разных издательствах. Или издательство может опубликовать несколько книг разных авторов. Таким образом, между авторами и названиями книг существует отношение один-ко-многим, а между издательствами и авторами существует отношение много-ко-многим.

Отношения между таблицами базы данных BIBLIO.MDB показаны на рис. 1.9.

Рис. 1.9. Отношения между таблицами базы данных BIBLIO.MDB.

Отношение один-к-одному

Если между двумя таблицами существует отношение один-к-одному, то это означает, что каждая запись в одной таблице соответствует только одной записи в другой таблице.

Примером такого отношения может служить отношение между таблицами. Таблица AUTHORS (Авторы) рассмотрена выше (рис. 1.5 и 1.6) и содержит краткую информацию о авторах (ФИО и год рождения). Таблица PERSON (Личность) содержит персональную информацию о авторах (домашний адрес, телефон, образование и др.) Структура таблицы PERSON показана на рис. 1.10. Следует отметить, что в базе данных BIBLIO.MDB никакой таблицы PERSON нет и мы упоминаем о ней только как о иллюстрации отношения между таблицами — один-к-одному.

Рис. 1.10. Структура таблицы PERSON

Между таблицами AUTHORS и PERSON существует отношение один-к-одному, так как одна запись, идентифицирующая автора, однозначно соответствует только одной записи в таблице PERSON, содержащей персональные данные об авторе.

Связь между таблицами определяется с помощью совпадающих полей: AuID в таблице AUTHORS и в таблице PERSON.

Отношение один-ко-многим

Хорошим примером отношения между таблицами один-ко-многим является отношение между авторами и названиями книг (таблицы AUTHORS и TITLES), так как каждый автор может иметь отношение к созданию нескольких книг. Связь между таблицами AUTHORS и TITLES осуществляется с помощью совпадающих полей Au ID в обеих таблицах.