
Лабораторная работа
Изучение связей (отношений) между таблицами.
Цель работы
Приобретение навыков создания и программирования связей (отношений) между таблицами.
2. Приобретение навыков работы с элементом Microsoft ADO Data Control.
Приобретение навыков работы с элементом Microsoft DataGrid Control.
Задание для самостоятельной работы
Изучить приведенные методические указания. В соответствии с заданием, приведенным в разделе "Порядок выполнения работы" спроектировать заданные таблицы, поля, индексы и связать их в итоговой таблице.
Содержание отчета
Отобразить заданные таблицы.
Перечислить созданные поля таблиц.
Описать формат каждого созданного поля.
Перечислить введенные индексы и описать их.
Подробное описание последовательности действий при написании проекта.
Методические указания
Отношения
После создания различных таблиц, содержащих данные, относящиеся к различным аспектам базы данных, разработчик должен продумать, каким образом объединить эти данные при их извлечении из базы данных. Первым шагом является определение связей между таблицами. После этого становится возможным создание запросов, форм и отчетов, в которых выводятся данные из нескольких таблиц сразу. В конечном итоге все эти таблицы базируются на одной-единственной таблице.
Таким образом, отношения координируют содержимое таблиц. Эта координация осуществляется путем установления связей между таблицами. Связь между таблицами устанавливает отношения между совпадающими значениями в ключевых полях, обычно между одноименными полями разных таблиц.
Отношение "один-к-одному"
При отношении "один-к-одному" каждой записи одной таблицы ставится в соответствие одна запись другой таблицы. Примером могут служить таблица сотрудников и таблица их адресов. Этот тип связи используют не очень часто, поскольку такие данные могут быть помещены в одну таблицу.
Рис. Отношение "один-к-одному"
Отношение "один-ко-многим"
Отношения "один-ко-многим" в базах данных встречаются наиболее часто. В этом случае одной записи одной таблицы ставится в соответствие несколько записей в другой таблице. Однако каждая запись второй таблицы не может иметь более одной соответствующей записи в первой таблице.
Рис. Отношение "один-ко-многим"
Отношение "многие-ко-многим"
При отношении "многие-ко-многим" одной записи таблицы может соответствовать несколько записей второй таблицы, а одной записи второй таблицы — несколько записей первой.
Этот вид отношений, как правило, можно установить только между двумя таблицами, связанными с помощью третьей (связующей) таблицы, которая состоит из первичных полей двух первых таблиц. Например, такой тип связи реализуется при создании библиотечного каталога. Один автор может написать несколько книг, но и одна книга может принадлежать нескольким авторам. Таким образом, должны существовать таблица сторон, таблица книг и третья таблица с названиями книг и именами авторов.
Рис. Отношение "многие-ко-многим"
Строение и режим работы rdbms
При управлении данными Visual Basic работает как система управления реляционной базой данных (Relational DataBase Management System, RDBMS). Как уже говорилось, реляционные базы данных состоят из множества таблиц. В таблицах хранятся самые различные информационные объекты. Например, при ведении списка заказов это таблицы заказчиков, товаров, счетов и т.д.
Рис. Строение таблицы
Кортежи, атрибуты и атомы
Строки таблицы называются записями или кортежами. Отдельные столбцы называют полями или атрибутами. Пересечение строки и столбца — это данное (значение) или атом.
Первичный ключ
Чтобы однозначно идентифицировать отдельную запись таблицы, используется так называемый ключ. Первичный ключ (PrimaryKey, PK) имеет каждая таблица. Это одно или несколько полей, которые однозначно определяют каждую запись в таблице. В примере на рис. первичным ключом могло бы стать поле с фамилией заказчика, так как оно встречается в таблице только один раз. Конечно, такой первичный ключ будет действовать до тех пор, пока в таблице не появится еще одна запись о Майере. Поэтому такие поля, как фамилия, никогда не определяются в качестве первичных ключей. В тех случаях, когда невозможно гарантировать уникальность значений каждого поля, имеется возможность создать ключ, состоящий из нескольких полей. Чтобы решить проблему со вторым Майером, можно было бы сделать первичным ключом комбинацию полей Surname и Name. Но и этот метод не дает полной гарантии. Можно, конечно, объединить в первичный ключ еще больше полей, чтобы исключить все повторяющиеся значения, но тогда реляционная база данных быстро потеряет смысл. Поэтому обычно задают специальные поля для первичного ключа, например номер заказчика или сотрудника. Эти номера присваиваются только один раз, и таким образом достигается однозначное соответствие между первичным ключом и локальной записью.
Внешний ключ
В реляционных базах данных важную роль играет еще. один ключ — внешний ключ. Внешний ключ — это поле одной таблицы, которое ссылается на первичный ключ другой таблицы.
Рис. Связь между внешним и первичным ключами
Таблицы Counts и Customers на рис. связаны ключом CustomerNum. Если обратиться к таблице Counts, то CountNum будет первичным ключом, а CustomerNum — внешним ключом.
Вторичный ключ
Наряду с первичными и внешними ключами таблица может содержать и другие, так называемые вторичные ключи. Эти ключи также называют индексами. Они действуют как предметный указатель книги. Чтобы найти в книге определенный термин, нет необходимости листать одну страницу за другой — достаточно посмотреть в предметный указатель и найти нужный номер страницы. Если вам понадобится найти в таблице Customers фамилию Майер, RDBMS будет действовать так же, как книга без предметного указателя, т.е. просматривать запись за записью, пока не будет найдена запись о Майере. Но если указать индекс для столбца Surname (проиндексировать поле Surname), RDBMS создаст небольшую таблицу, в которой будут храниться только имена и ссылки на позицию записи в таблице. Теперь для поиска записей RDBMS не будет просматривать всю большую таблицу. Для таблиц с большим объемом данных это дает существенный выигрыш в быстродействии.
Рис. Процесс поиска по ключу