А.Ю. Гончаров Access 2003 (960524), страница 11
Текст из файла (страница 11)
Если пользователь ничего сам не изменит, то эти связи будутопределены автоматически. Это относится, разумеется, к другим таблицам, созданным с помощью мастера, потому что в противном случае вероятность совпа-Таблицы57дения имен невелика. Если же подходящих таблиц не найдено, то перед именамивсех таблиц в списке будет стоять «не связана».
Связь может определить и самразработчик, если выберет таблицу в списке и воспользуется кнопкой Связи.На последнем шаге мастера таблиц можно определить режим, который будетактивизирован после завершения работы мастера. Опция «Изменить структурутаблицы» означает переход в режим конструктора для новой таблицы. Выберитеее, если необходимо доделать то. что не смог выполнить мастер: ввести новыеполя, придать им необходимые свойства, переопределить ключ, создать описанияполей и т. д. Установка переключателя в положение «Ввести данные непосредственно в таблицу» приведет к тому, что таблица будет открыта для просмотраи редактирования.
Обычно в этот режим переходят, нажимая кнопку Открытьв окне базы данных. Позиция переключателя «Ввести данные в таблицу с помощью формы, создаваемой мастером» говорит сама за себя: мастер создаст фирмудля новой таблицы. Вид формы будет очень простым - все поля выстроятся однопод другим. При необходимости форму можно будет сохранить, и ее значок появится на своем обычном месте — на вкладке Формы.2.4.
Связывание таблицЧаще всего причиной размещения данных в двух и более таблицах в одной БДявляется дублирование данных (наличие в таблице повторяющихся фрагментов).Для того чтобы сэкономить место на диске и в памяти, были разработаны принципы нормализации, которые позволили исключить дублирование. Большинствопользователей, работающих с базой данных на своем компьютере (размещениебазы на сервере - отдельная тема), не сталкивается с необходимостью экономииместа на диске, и нормализация выполняется ради соблюдения другого принципа: данные должны быть организованы таким образом, чтобы в случае их редактирования каждое исправление или дополнение делалось только в одном местебазы данных.
Третья важная причина разнесения информации по таблицам - необходимость группировки данных по их содержанию. Каждая таблица может отвечать определенной тематике. Четвертая причина - принцип модульности,который предполагает, что база данных должна быть разбита на несколько унифицированных блоков, которые можно модернизировать и заменять по отдельности, а таблицы, подготовленные для одной базы данных, можно было быиспользовать и в других.-Глава 2Схема данныхДля связывания таблиц используется схема данных, которая запускается одноименной кнопкой, расположенной на главной панели инструментов.' На схеме каждая таблица представлена панелью со списком полей.
Этого достаточно, чтобысоздать нужную связь. Для примера рассмотрим, как организованы связи междутаблицами в базе данных «Борей» (рис. 2.22).L^feS,„..,;.-'•;-. Схема данныхПоставщики, :Товары1> НазваниеС iff сщатьсяК: Дол*.нос"ь[!Ддрес'. Горел( .Область| Индексj СтранаI Телефон1 ФаксДг !•• .3 шня я ; границ аКодТсвврэV ю Марка~ КодПостаещика"• |КодТила, Единицам змеремия^Ценз^НаСкладе/Ожидается! Минина льныйЗапа сIПсставкиПрекрашены|1Типы1КодТиги.Категория'ОписаниеИзображение11Заказано™"\оо КодЗрказаКодТоварал.лЗаказыоо————^— '£пяЗ»(жа^ КддКпиемтвКлиенты— КодКтснтаНа5Е аннгОбращать^: яКДолжность'ДатаНаэн аченияАдресДатаисполнения„Горел.ДоставкаОбластьСтоимоств ДоставкиИндекс-КазбаниеПолучателяСтрана.Ддрес ПолучателяТелефон]ГородПолучателв;<ЬаксюбластьПолучателя.ИндексПопучателя{СтранаПолучателяДоставка^^ |КодСотрудпика/:датаРа смещенияКоличество v/Сотрудники/.! /1КодСотрудаи *• ФамипияИмяДолжностьОбращениеДатаРождениДатаКаймлАдресГород1"ЙлапьИндексСтрана•* КодДосганин| Название:Теле'1)оп.
-.„=,,, LJUii^ftnДобавочныйФотографияvV|<АРис. 2.22. Схема данных базы «Борей»Основу этой базы данных составляют две таблицы: Товары и Заказы. Действительно, коммерческая фирма оперирует заказами: менеджер формирует заказ,за него получают оплату, заказ отгружается покупателю. Поэтому в таблице находятся все характеристики заказа, а названия полей говорят сами за себя.В базе данных ведется также учет клиентов. Поскольку в таблице Клиентыдля каждого клиента отведена одна запись, то эта таблица связана с таблицейЗаказы отношением типа «один-ко-многим» (одному клиенту соответствуют несколько заказов).Таблицы59«Многие» в данном случае обозначаются знаком бесконечности. Обратитевнимание, что такая же связь существует и с таблицей Доставка, но тут ееназначение другое: она необходима для создания поля подстановки Доставкав таблице Заказы.
Пример по созданию такого поля есть в главе 4. Таблица Доставка - вспомогательная. Она содержит мало записей и может не изменятьсяв процессе эксплуатации базы данных.О том. как связана таблица Заказы с таблицей Заказано, я рассказывалв главе 1 (см.
рис. 1.2). Здесь же мы видим только схематическое обозначениесвязи: одному заказу может соответствовать несколько товаров.Данные о сотрудниках фирмы собраны в отдельной таблице. Поскольку одинменеджер обрабатывает много заказов, с таблицей Заказы установлена связь«один-ко-многим».Другим центром формирования данных является таблица Товары. Обычнов подобной таблице хранится информация о товарах, которые есть на складе.Поскольку товар может временно отсутствовать, в таблице должно быть предусмотрено поле для отображения этого факта.
В данном примере мы видим такжеполе МинимальныйЗапас. Его назначение очевидно.Записи о поставщиках не должны повторяться, поэтому для хранения информации о поставщиках создана отдельная таблица Поставщики. Она тоже используетсвязь «один-ко-многим» (один поставщик может продать несколько товаров). В реальной жизни все, конечно, сложнее: одни и те же товары могут различаться поцене, приходить от разных поставщиков, иметь разные сроки хранения и т. д. Всеэто должно находить свое отражение в дополнительных полях таблиц.Таблица Типы хранит информацию о категориях товаров.
Это тоже вспомогательная таблица, которая нужна для создания поля подстановки. В таблице Товарытип (фрукты, мясо, напитки и т.д.) закодирован в числовой форме, а в таблицеТипы помещены словесные расшифровки. На первый взгляд может показатьсястранным, почему все товары собраны в одной таблице (наверняка ими занимаютсяразные менеджеры), но на самом деле именно так и надо: при формировании заказапокупатель может затребовать любой набор продуктов, и соответствующие позиции удобнее выбирать из одной таблицы.
К тому же покупатель наверняка долженполучить определенные документы (накладную, счет-фактуру), и их тоже легчесоздавать как формы^ сделанные на основе одной таблицы.Зато, если надо отобрать товары одного типа (например, рыбопродукты;), этонесложно сделать с помощью запроса или фильтра.В базах данных, создание которых рассматривается в этой книге, тоже используется связывание таблиц.
Практические-примеры есть в главах 4 и 7,Глава 2Формирование связиИтак, для того чтобы связать две таблицы, нужно в первую очередь предусмотреть поля в таблицах, значения которых пригодны для связи. Чаще всего этополя счетчиков или числовые поля. Необходимо также точно знать, могут либыть в поле повторяющиеся значения. Если есть - значит «многие», если нетзначит «один» (подробно варианты связей разбираются ниже). После этого надовключить таблицы в схему данных; для этого используется команда Добавитьтаблицу.
Установка связи производится перетаскиванием имени одного поля наимя другого. Указатель мыши в момент завершения перетаскивания должен принять вид прямоугольника.После этого программа открывает окно, показанное на рис. 2.23. Здесь мы видим характеристики одной связи базы «Борей». Удобно, когда в обеих таблицахсвязанные поля имеют одинаковые имена. Зато другие характеристики полеймогут не совпадать.
В данном случае поле КодСотрудника в таблице Сотрудникиявляется ключевым, и каждое его значение уникально. А поле с таким же именемв таблице Заказы - обычное числовое, и в нем может быть много одинаковыхзначений. Так создается связь «один-ко-многим».•вменение связенТабпица/гапрос:СотрудникиСб«анная таблица/запрос:Заказыvi i каскадное обновление :вязамны.< попейI i каскадное удаление связанных записейРис. 2.23.
Окно с параметрами связиВторое окно, содержащее параметры связи, показано на рис. 2.24. Оно открывается кнопкой Объединение. Я рекомендую всегда проверять, какой из трех вариантов объединения выбран, и в случае необходимости использовать другой вариант.Здесь, по сути, решается вопрос, как поступить с записями, для которых не нашлосьадекватного значения поля в другой таблице: делать их доступными или нет. Выборварианта определяется только по смыслу.
В нашем примере задействовано самоежесткое из всех условий.Таблицы61Практическую пользу от связывания таблиц можно извлечь, создав запрос,форму или отчет. В этом случае связанные записи будут выбираться из таблицединым блоком. Теперь осталось только рассмотреть некоторые особенности разл и ч н ы х типов связей.Параметры объединения©i]J Объединение только тех записей, в которых связанныеполя обеих таблиц совпадают,:С ) 2. Объединение ВСЕХ записей из "Сотрудники" и только техзаписей из "Заказы", в которых связанные лолясовпадают.I О Э..Объединение ВСЕХ записей из "Заказы" и только техзаписей из "Сотрудники", в которых связанные полясовпадают.Рис.
2.24. Дополнительное окно позволяет точновыбрать параметры сиязиСвязь «один-ко-многим»Об этой связи было рассказано достаточно много, и добавить почти нечего.Подчеркну лишь, что это самый распространенный вид связи. Нельзя сказать, чтокакая-то таблица в данном случае является главной, а другая подчиненной:выборка данных может идти в обоих направлениях. В предыдущем примере можно, задав код сотрудника, получить информацию обо всех заказах, с которыми онимел дело; и наоборот, выбрав заказ, можно определить имя менеджера.Связь «один-к-одному»Эта связь подразумевает, что в обеих таблицах в связанных полях имеютсятолько уникальные записи.
На первый взгляд это кажется абсурдным: не шрощели было создать одну таблицу вместо двух? Действительно, в некоторых случаяхразницы нет. Но давайте предположим обратное. Допустим, у нас есть таблица.состоящая из десяти полей, и мы хотим разделить ее на две. Пять полей в однутаблицу, пять в другую. В этом случае, чтобы сохранить целостность записей,таблицы надо связать по принципу «один-к-одному». С точки зрения быстродействия и экономии места мы вряд ли что-нибудь выиграем. Даже наоборот,, придется создавать дополнительные кодовые поля.. Зато теперь мы можем принеобходимости заменять эти таблицы другими независимо друг от другл.