
- •Введение
- •1. Базы данных и системы
- •1.1. Наборы записей RecordSet
- •1.2 Элементы управления Data
- •1.3.Свойства элемента управления Data
- •1.4. Методы элемента управления Data
- •Option Compare Text,
- •Option Compare Binary.
- •1.5. Реляционные связи
- •1.5.1. Первичный ключ
- •1.5.2. Внешний ключ
- •1.5.3 Индексы
- •2. Структура базы данных biblio
- •3. Проверка корректности данных
- •3.1 Событие Validate
- •3.2. Событие Error
- •4. Ввод данных
- •5. Доступ к полям в объектах recordset
- •6. Введение в sql
- •Select (список полей) from (список таблиц) [where (выражение)]
- •11. Пример использования внутреннего объединения.
- •6.2. Использование sql-операторов
- •7. Усовершенствованные элементы управления, связанные с данными
- •7.1. Связанный с данными элемент управления List
- •7.3. Связанный с данными элемент управления Grid
- •8. Отображение баз данных
- •8.1 Объект Database
- •8.2 Объект TableDef: определение таблиц
- •8.2.1 Идексы таблицы
- •8.2.2 Поля таблицы
- •8.3 Объект QueryDef: определение запросов
- •8.4. Описание проекта dbStructure
2. Структура базы данных biblio
Одна из двух стандартных БД, поставляемых с Visual Basic, является BIBLIO. Она имеет простую структуру, содержит заголовки (наименования) книг, имена авторов и издателей в виде четырех таблиц (рис. 4). Вместо имен полей каждой таблицы на рисунке отображены некоторые содержащиеся в них данные. Приведены только те поля, которые необходимы, чтобы показать связи между таблицами. Имена полей отображены как заголовки столбцов. Первое правило при проектировании БД не дублировать данные. Хранение имени автора совместно с наименованием книг нарушило бы это правило, поскольку автор обычно имеет больше одной книги. В этом случае необходимо было бы повторить имя автора в более чем одной строке таблицы Titles. Имена авторов хранятся в отдельной таблице - Authors. Сказанное относится и к именам издателей. Так как имя каждого издателя упоминается в нескольких книгах, то информация о них в таблице Titles не хранится. Зачем повторять адрес издателя с каждым наименованием книги? Пока обосновано существование трех таблиц в БД. Каждая книга может иметь более одного автора, а имя автора может появляться не только в одном наименовании книги. Хранение имен каждого из авторов или их ID для каждого наименования книги потребовало бы значительных дополнительных записей в таблице Titles. В данном случае целесообразно создание четвертой таблицы Title Author,содержащей поля ID-автора (Au_Id) и ISBN книг. Связь между таблицами Title Author и Authors осуществляется посредством ключей Au_Id. Очевидно, что имена авторов не могут обрабатываться подобно именам издателей.
Таблица Title Author находится между таблицами Titles и Authors и соединяет их с парой полей - ISBN книги и ID автора. Для просмотра имени автора конкретной книги необходимо выполнить следующие действия:
1. Выберете наименование книги в таблице Titles.
2. Прочитайте значение ISBN в Title и используйте его как ключ для нахождения соответствующей строки (строк) в таблице Title Author.
3. Из каждой строки таблицы Title Author прочтите ID автора и используйте его в качестве ключа для поиска имени автора в таблице Authors.
Рис.4. Структура базы данных BIBLIO
Описанная методика не сможет эффективно работать, если нет способа быстрого поиска записи по значению конкретного поля. А он может быть выполнен при соответствующей индексации таблиц.
Как видите, индексы - неотъемлемая часть БД. Например, таблица Title Author (Автор книги) индексируется по полю ISBN. Если необходимо обеспечить поиск в противоположном направлении (дано имя автора, а требуется найти книги, в которых оно появляется), необходимо проиндексировать таблицу Title Author по полю AuID. Очевидно, таблица Authors (Авторы) должна быть индексирована по полю AuID, так как в таблице Title Author хранятся ID авторов, а не их имена. Таблица Publishers (Издатели) индексируется по полю PublD, чтобы можно было быстро перейти от названия книги к ее издателю. Как видно из рис.4, в первых столбцах трех таблиц имеется знак “+”, что свидетельствует о наличии в этих таблицах первичных ключей. При нажатии “+”( выборе записи с конкретным первичным ключом) отображается таблица, связанная с исходной. В полученной таблице выводятся записи, которые имеют вторичные ключи, совпадающие с выбранным первичным ключом.