Структура базы данных
BIBLIO
Одна из двух стандартных баз данных, поставляемых с Visual Basic, называется BIBLIO. База данных BIBLIO имеет простую структуру, почти тривиальную, но демонстрирует многие из рассмотренных ранее тем. Откройте базу BIBLIO с помощью Visual Data Manager и исследуйте ее структуру.
База BIBLIO содержит заголовки книг имена авторов и издателей в виде четырех таблиц (рис. 17.11). Вместо имен полей каждой таблицы на рисунке отображены некоторые содержащиеся в них данные. Приведены только те поля, которые необходимы, чтобы показать связи между таблицами. Имена полей отображены как заголовки столбцов. Первое правило при проектировании базы данных — не дублировать данные. Хранение имени автора совместно с заголовками нарушило бы это правило, поскольку автор обычно пишет больше одной книги. В этом случае необходимо было бы повторить имя автора в более чем одной строке таблицы Titles. Имена авторов хранятся в отдельной таблице – Authors. Это же справедливо и для издателей. Так как каждый издатель появляется во многих книгах то информация об издателях в таблице Titles не хранится. Зачем повторять адрес издателя с каждым заголовком?
Пока обосновано существование трех таблиц в базе данных. Но в базу данных BIBLIO входит четвертая таблица. Каждая книга может иметь более одного автора, а имя автора может появляться не только в одном заголовке Хранение имен каждого из авторов или их ID для каждого наименования книги потребовало бы соответствующих полей в таблице Titles. Отличие поля с ID автора от поля PubID (ID издателя) состоит в том, что книга может иметь несколько авторов, и необходимо предусмотреть ряд полей для хранения идентификаторов Author ID (AuthorIDl, AuthorID2 и т.д.). Очевидно, что имена авторов не могут обрабатываться подобно именам издателей.
Рис. 17.11. Структура базы данных BIBLIO
Таблица Title Author находится между таблицами Titles и Authors и соединяет их с парой полей — ISBN книги и ID автора. Для просмотра имени автора конкретной книги необходимо выполнить следующие действия.
1. Найдите искомый заголовок в таблице Titles.
2. Прочитайте значение ISBN в Title и используйте его как ключ для нахождения соответствующей строки (строк) в таблице Title Author.
3. Из каждой соответствующей строки таблицы Title Author прочтите ID автора и используйте его в качестве ключа для поиска имени автора в таблице Authors.
Тем, кто не знаком с программированием баз данных, эта процедура может показаться сложной, но это не так. Далее в этой главе показаны два способа поиска конкретных записей с помощью ключей. Описанная методика не сможет эффективно работать, если нет способа быстрого поиска записи по значению конкретного поля. А он может быть выполнен при соответствующей индексации таблиц.
Как видно, индексы - неотъемлемая часть разработки базы данных. Например, таблица Title Author (Автор книги) индексируется по полю ISBN. Если необходимо обеспечить поиск в противоположном направлении (дано имя автора, а требуется найти книги, в которых оно появляется), необходимо проиндексировать таблицу Title Author по полю AuID. Очевидно, таблица Authors (Авторы) должна быть индексирована по полю AuID, так как в таблице Title Author хранятся ID авторов, а не их имена. Таблица Publishers (Издатели) индексируется по полю PubID, чтобы можно было быстро перейти от названия книги к ее издателю.