
- •Основные сведения о создании баз данных
- •Некоторые термины, связанные с базами данных
- •Правильная структура базы данных
- •Процесс разработки
- •Определение цели создания базы данных
- •Поиск и организация необходимых данных
- •Распределение данных по таблицам
- •Преобразование элементов данных в столбцы
- •В приведенном ниже списке содержится несколько советов по созданию столбцов.
- •Задание первичных ключей
- •Создание связей между таблицами
- •Создание отношения "один-ко-многим"
- •Создание отношения "многие-ко-многим"
- •Усовершенствование структуры
- •Усовершенствование структуры таблицы "Продукты"
- •Применение правил нормализации
- •Первая нормальная форма
- •Вторая нормальная форма
- •Третья нормальная форма
Создание связей между таблицами
После распределения данных по таблицам необходимо получить возможность объединять их. Например, изображенная ниже форма включает сведения из нескольких таблиц.
Эта форма содержит данные из таблиц "Клиенты",
"Сотрудники",
"Заказы",
"Продукты"
и
"Сведения о заказах".
Access — это система управления реляционными базами данных. В реляционной базе данных сведения распределяются по отдельным тематически организованным таблицам. Для объединения данных используются связи между таблицами.
Создание отношения "один-ко-многим"
Р
ассмотрим
следующий пример: база данных заказов
продуктов содержит таблицы "Поставщики"
и "Продукты". Поставщик может
поставлять любое количество продуктов.
Следовательно, для каждого поставщика
из таблицы поставщиков в таблице
продуктов может содержаться большое
количество продуктов. Поэтому связь
между таблицей поставщиков и таблицей
продуктов представляет собой отношение
"один-ко-многим".
Чтобы создать отношение "один-ко-многим" в структуре базы данных, добавьте первичный ключ на стороне "один" в таблицу на стороне "многие" в виде дополнительного столбца. В данном примере необходимо добавить столбец кода поставщика из таблицы поставщиков в таблицу продуктов. После этого Access сможет использовать код поставщика из таблицы продуктов для поиска поставщика каждого продукта.
Столбец кода поставщика в таблице продуктов называется внешним ключом. Внешний ключ — это первичный ключ другой таблицы. Столбец кода поставщика в таблице продуктов является внешним ключом, т. к. он является также первичным ключом таблицы поставщиков.
О
сновой
для связывания таблиц является объединение
первичных и внешних ключей в пары. Если
не удается определить таблицы с общим
столбцом, создание отношения
"один-ко-многим" обеспечивает
необходимость общего столбца для двух
таблиц.
Создание отношения "многие-ко-многим"
Рассмотрим связь между таблицами "Продукты" и "Заказы".
Один заказ может включать несколько продуктов. С другой стороны, отдельный продукт может содержаться в нескольких заказах. Следовательно, для каждой записи таблицы заказов может существовать несколько записей в таблице продуктов, и наоборот. Такой тип связи называется отношением "многие-ко-многим". Обратите внимание, что для обнаружения отношения "многие-ко-многим" между таблицами важно рассмотреть обе стороны.
Темы двух таблиц — заказы и продукты — связаны отношением "многие-ко-многим". Это проблема. Представьте, что произойдет, если создать связь между двумя таблицами путем добавления поля с кодом продукта в таблицу заказов. Чтобы заказ мог содержать несколько продуктов, на каждый заказ в таблице должно приходиться несколько записей. В этом случае сведения о заказе должны повторяться в каждой строке заказа, что может привести к неэффективности структуры таблицы и неточности данных. Такая же трудность возникает при создании поля с кодом заказа в таблице продуктов — для каждого продукта в таблице будет существовать несколько записей. Как решить эту проблему?
Решением является создание третьей, связующей, таблицы, в которой отношение "многие-ко-многим" разбивается на два отношения "один-ко-многим". Первичные ключи двух таблиц вставляются в третью таблицу. В результате в третьей таблице сохраняются все экземпляры отношения.
К
аждая
запись в таблице сведений о заказах
представляет собой отдельный элемент
строки заказа. Первичный ключ таблицы
состоит из двух полей — внешних ключей
таблиц заказов и продуктов. Невозможно
использовать для первичного ключа этой
таблицы только поле с кодом заказа, т.
к. один заказ может содержать много
элементов строк. Код заказа повторяется
для каждого элемента строки, поэтому
это поле не содержит уникальных значений.
Невозможно также использовать только
поле с кодом продукта, т. к. один продукт
может входить в несколько заказов.
Однако использование двух полей позволяет
получить уникальное значение для каждой
записи.
В базе данных продаж продуктов таблицы "Заказы" и "Продукты" не имеют непосредственной связи. Они связаны опосредованно через таблицу "Сведения о заказах". Отношение "многие-ко-многим" между заказами и продуктами представлено в базе данных двумя отношениями "один-ко-многим":
таблицы заказов и сведений о заказах связаны отношением "один-ко-многим"; каждый заказ содержит несколько элементов строк, но каждый элемент связан только с одним заказом;
таблицы продуктов и сведений о заказах связаны отношением "один-ко-многим"; каждый продукт может быть связан с несколькими элементами строк, но каждый элемент связан только с одним продуктом.
В таблице "Сведения о заказах" можно определить все продукты в отдельном заказе. Можно также определить все заказы для отдельного продукта.
После создания таблицы сведений о заказах список таблиц и полей может выглядеть следующим образом:
С
оздание
отношения "один-к-одному"
Следующий тип отношений — отношение "один-к-одному". Предположим, что требуется сохранить дополнительные сведения о продукте, которые редко используются или применимы к небольшому числу продуктов. Поскольку эти сведения используются редко и их сохранение в таблице продуктов требует создания дополнительного пустого поля для всех продуктов, к которым они неприменимы, лучше поместить эти сведения в отдельную таблицу. Как и в таблице продуктов, в качестве первичного ключа используется код продукта. Дополнительная таблица и таблица "Продукты" связаны отношением "один-к-одному". Для каждой записи таблицы продуктов в дополнительной таблице существует одна запись. При определении отношения такого типа обе таблицы должны содержать общее поле.
Если возникает необходимость в создании в базе данных отношения "один-к-одному", рассмотрите возможность объединения данных в одну таблицу. Если этот вариант неприемлем, например по причине возникновения пустых полей, используйте приведенный ниже список для определения отношения в структуре базы данных.
Если таблицы объединены одной темой, отношение можно создать путем использования общего первичного ключа.
Если тематика и первичные ключи таблиц различаются, следует выбрать любую из таблиц и вставить ее первичный ключ в другую таблицу в качестве внешнего ключа.
Определение связей между таблицами позволяет обеспечить правильность таблиц и столбцов. При наличии отношения "один-к-одному" или "один-ко-многим" таблицы должны содержать общие столбцы. При наличии отношения "многие-ко-многим" требуется третья таблица.