
Связь типа "один-к-одному"
При отношении «один-к-одному» запись в таблице 1 может иметь не более одной связанной записи в таблице 2, и, наоборот. Этот тип связи используется редко, поскольку такие данные могут быть помещены в одну таблицу. Связь с отношением «один-к-одному» используют для разделения очень широких таблиц, для отделения части таблицы по соображениям защиты, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице. Например, такой тип связей между таблицами подходит для хранения конфиденциальных кадровых сведений о сотрудниках.
Допустим, Вы хотите в Вашей БД Студенты указать еще адреса студентов, а также данные о родителях каждого студента. Конечно, можно было бы ввести эти данные в саму таблицу, но она уже довольно большая, и станет совсем неудобной для пользователя. Можно создать в БД еще одну таблицу Адреса и связать ее с таблицей Студенты при помощи связи типа "один-к-одному". Создайте таблицу Адреса, заполните ее самостоятельно. Обратите внимание: у Вас должны быть в ней поля: Адрес, Данные о родителях. Закройте таблицу. Щелкните правой кнопкой мыши по свободному месту в окне БД. Раскроется контекстное меню, в нем выберите Схема данных, щелкните правой кнопкой, появится контекстное меню
выберите из него Добавить таблицу, щелкните. Раскроется окно Добавление таблицы, в котором надо выбрать Адреса и нажать кнопку Добавить. Раскроется окно
в котором надо нажать мышью поле Код в таблице Студенты и, не отпуская, перетащить к полю Код в таблице Адреса. Снова раскроется окно Связи, в нем, как и в прошлый раз, надо выбрать Обеспечение целостности данных, далее выбрать пункт 1. Объединение только тех записей, в которых связанные поля обеих таблиц совпадают. Нажмите ОК, обратите внимание, в нижней части окна написан тип связи: один-к-одному. Нажмите кнопку Создать. Должно получиться окно
Связь :'один-к-одному" удобна для разбиения одной таблицы на несколько. Иногда это удобно для пользователя, хотя не уменьшает размер БД. Каждая таблица хранит данные из определенной области, в этом случае таблицы проще редактировать. Кроме того, одну таблицу можно заменить другой, модифицированной. Это — принцип модульности БД. На следующих занятиях Вы будете работать со связанными таблицами.
Мастер анализа таблиц (связь типа "многие-к-одному")
В Access существует средство для автоматического выполнения операции нормализации. Это так называемый Мастер по анализу таблиц. Если Вы не знаете, насколько рационально спроектирована таблица, то можете прогнать ее через эту программу. При использовании данного Мастера следует иметь в виду, что пользователь не всегда владеет всей информацией о своих данных. Например, если таблица большая, то человек просто не в состоянии запомнить все ее особенности.
Рассмотрим следующий пример. Создайте новую БД, назовите ее Анализ. В этой БД создайте таблицу, введите в нее следующие данные:
Магазин |
Директор |
Номер накладной |
"Океан" |
Иванов |
2 |
"Подарки" |
Петров |
19 |
Гастроном |
Сидоров |
7 |
''Подарки'1 |
Петров |
15 |
Гастроном |
Сидоров |
22 |
"Океан" |
Иванов |
4 |
"'Подарки" |
Петров |
3 |
Гастроном |
Сидоров |
11 |
"Океан" |
Иванов |
8 |
"Океан" |
Иванов |
9 |
Самостоятельно продумайте типы и форматы полей. Назовите таблицу Таблица1, сохраните ее.
Видно, что таблица имеет повторяющиеся данные. Для запуска Мастера в строке меню выберите Сервис, в раскрывшемся меню выберите Анализ, затем Таблица. Раскроется окно
Этот шаг Мастера носит
справочный характер. Программа дает
пользователю рекомендации. Естественно
желание всех разработчиков избежать
дублирования данных и свести к минимуму
вероятность опечаток при их редактировании,
Вы можете нажать на кнопку
.
Затем нажмите на кнопку Далее.
Раскроется следующее
окно
Внимательно рассмотрите окно, посмотрите примеры. Второй шаг Мастера показывает, к чему стремится программа. Предполагается, что разбиение одной таблицы на несколько позволит усовершенствовать БД. На Мастера возлагается также задача определить связи между таблицами. Он оставляет в неприкосновенности исходную таблицу и создает новые для размещения тех же самых данных. Разработчик БД должен сам впоследствии решить, как ему поступать с таблицами: какие из них стереть, а какие оставить. Нажмите кнопку Далее.
Настоящая работа Мастера начинается с третьего шага. Данное окно предназначено для выбора таблицы, но в нашем случае она одна, выбирать не из чего. Нажмите кнопку Далее.
На этом шаге надо ответить на вопрос, каким образом будут распределяться поля по таблицам, если Мастер обнаружит, что исходную таблицу надо разбить. Выберите Да, разделение полей выбирается мастером. Нажмите кнопку Далее.
Получили первые результаты: Мастер разбил исходную таблицу на две. Теперь он предлагает дать новые имена вновь созданным таблицам. Для этого в окне Мастера имеется кнопка Переименовать таблицу.
Видно, что в таблице1 главное — номер накладной, поэтому ее стоит назвать Накладная. Вторую же таблицу можно назвать Магазины.
Щелкните по окну таблицы,
которую хотите переименовать, нажмите
на кнопку
,
в открывшемся окне введите новое имя
таблицы, нажмите ОК. Если Вы передумали,
можно отменить название, нажав на
кнопку
.
Мастер связал две таблицы
с помощью операции
подстановки. Связь
между двумя таблицами носит название
"многие-к-одному", т.к. много записей
из таблицы Накладные
связаны с одной записью
из таблицы Магазины.
Графически "много"
обозначается символом бесконечности
,
а один —
цифрой
1.
При установке связи между таблицами одна из них является главной, а другая — подчиненной, связанной. В данном случае выполнена подстановка в Накладные, а Магазины является источником данных для нее. Должно ли так быть по смыслу? Надо заметить, что данные распределились по таблицам более рационально, но с позиции здравого смысла структура данных претерпела изменение в худшую сторону. Очевидно, что во второй таблице (Магазины) собраны основные сведения об объектах, а в первой (Накладные) — частные. Возможна ситуация, когда в базу данных будет добавлена еще одна таблица с информацией, и ее надо будет связать с таблицей Магазины. Поэтому таблица Магазины должна занимать центральное место в БД, и связи к другим таблицам должны идти от нее, а не к ней. Как это сделано, рассмотрим позже. Обратите внимание, в таблице Магазины создано новое поле Уникальный код сделано ключевым автоматически. По смыслу это верно, т.к. в списке организаций названия не должны повторяться. Сейчас щелкните по кнопке Далее, раскроется окно
На этом шаге необходимо определить ключевые поля, если они не заданы или не удовлетворяют требованию однозначности в отношении соответствующих им записей. Например, на рисунке в таблице Магазины ключевым полем автоматически сделано поле Директор, а это не очень верно, т.к. среди директоров могут быть однофамильцы. Лучше сделать ключевым поле Магазины. Для этого щелкните по этой таблице, чтобы
сделать ее активной, щелкните
по кнопке Задать ключ
.Поле
Магазины стало
ключевым. Кнопка
—
Добавить ключ —
нужна для создания в таблице нового
поля, которое будет использовано в
качестве ключевого. Например, можно в
таблице Магазины
создать новое поле
Код. Сделайте
это! Нажмите кнопку Далее.
Если установить переключатель в строке Да, следует создать запрос, то помимо таблиц Мастер построит таблицу-запрос, которая будет доступна на вкладке Запросы. Имя запроса будет совпадать с названием исходной таблицы. Можете отключить вывод справки, а можете вывести ее на экран. Нажмите кнопку Готово. Появится сообщение
Нажмите кнопку ОК. Посмотрите на окно Вашей БД, оно имеет вид
Таблица1 — это исходная таблица. Магазины и Накладные - созданные таблицы. Посмотрите, они должны иметь вид
Щелкните по вкладке Запросы, там расположен запрос Табли-ца1_новая. Откройте этот запрос, перед Вами откроется окно
Мастер анализа таблиц устранил дублирование данных путем создания таблицы, в которой перечислены названия магазинов. То есть физически название каждого магазина и связанная с ним фамилия директора встречается только один раз. Поле Подстановка Магазины предполагает возможность выбора значения поля из списка, а это искажает смысл приведенных данных: каждой накладной соответствует только одна организация. В таблице Накладные эта однозначность нарушена. В каждую ее запись можно подставить название любой ее точки. Следовательно, в данном случае связь типа "многие к одному" нас не устраивает.
Далее попробуем создать подчиненную форму как в предыдущей работе. В режиме конструктора таблицы Накладные щелкните по полю Магазины_Код, в его свойствах в нижней части экрана войдите во вкладку Подстановка, в ней свойство Тип элемента управления установите как Поле. Это должно выглядеть следующим образом
Таким образом Вы будете использовать для операции подстановки значения ключевого поля Код из таблицы Магазины. Откройте таблицу Накладные для просмотра. Теперь в столбце Подстановка Магазины должны быть числа — коды поля Код из таблицы Магазины. Сравните Вашу таблицу с рисунком
Переименуйте теперь поле Подстановка Магазины, назовите его Код магазина. Тип этого поля должен быть числовым, а формат — длинное целое. Закроем окно таблицы.
Удалим связь между таблицами. Для этого в строке меню выберите Сервис, в раскрывшемся меню выберите Схема данных, щелкните. Раскроется окно
Щелкните по связи мышкой, нажмите клавишу Del. Появится предупреждение
Если Вы вдруг передумали удалять связь — нажмите кнопку Нет, сейчас нажмите Да. Связь пропала. Теперь самостоятельно проделайте оставшуюся работу по созданию подчиненной формы следующего вида
Результат покажите преподавателю.