1. Создание подстановок

advertisement
1
Основные операции в Microsoft Access
Часть 2. Создание подстановок и связей
Данный документ предназначен для использования в самостоятельной работе студентов с
приложением Microsoft Office Access при выполнении своего проекта. Рисунки и
управляющие последовательности относятся к Microsoft Office Access 2003.
Содержание
1. Создание подстановок ................................................................................................................ 1
1.1. Подстановка для внешнего ключа...................................................................................... 1
1.2. Подстановка ранее введенных значений ........................................................................... 6
2. Создание связей .......................................................................................................................... 8
2.1. Определение связи «один ко многим»............................................................................... 8
2.2. Параметры связи ................................................................................................................ 10
2.2.1. Обеспечение целостности данных ............................................................................ 10
2.2.2. Параметры объединения ............................................................................................ 11
2.3. Определение связи «один к одному» ............................................................................... 12
3. Редактирование записей таблицы ........................................................................................... 13
4. Редактирование схемы базы данных....................................................................................... 16
4.1. Редактирование полей таблицы........................................................................................ 16
4.2. Редактирование связей ...................................................................................................... 17
1. Создание подстановок
При заполнении таблиц встает ряд проблем, затрудняющих выбор значений полей.
Рассмотрим некоторые способы решения этих проблем.
1.1. Подстановка для внешнего ключа
Одной из проблем заполнения полей является трудность определения нужного значения
внешнего ключа, поскольку надо вставить числовое значение ключа, по которому трудно
определить, чему именно оно соответствует.
Например, пусть имеется две таблицы (рис.1), между которыми с помощью внешнего
ключа «Операции.[Код клиента]» реализуется связь «один ко многим». При заполнении
поля «Операции.[Код клиента]» необходимо выбирать клиента, который произвел
операцию, по коду из поля «Клиенты.[Код клиента]». Если клиентов много, то выбор
нужного значения становится трудным.
2
Рисунок 1. Таблицы, связанные по ключам
«Операции.[Код клиента]» и «Клиенты.[Код клиента]»
Для решения этой проблемы используется подстановка. Идея состоит в том, чтобы
предложить для выбора не код, а, например, имя клиента. Способ подстановки задается на
вкладке «Подстановка» (рис.2).
Рисунок 2. Исходное состояние вкладки «Подстановка» - подстановка не задана
Разберем один из достаточно универсальных способов задания подстановки.
o В режиме конструктора выберите поле внешнего ключа (рис.2).
o Выберите «Тип элемента управления» - «Поле со списком» (рис.3). Это значит, что
Вы собираетесь брать список для подстановки из какой-то таблицы. В нашем случае
из таблицы «Клиенты».
3
Рисунок 3. Исходное состояние подстановки «Поле со списком»
o Сформируйте свойство «Источник строк». Для этого нажмите кнопку вызова
построителя запросов
. Появится диалог «Добавление таблицы» (рис.4). Здесь
надо выбрать таблицу, из которой будет составляться список подстановки. В нашем
случае это таблица «Клиенты». Выберите ее и нажмите последовательно кнопки
«Добавить» и «Закрыть». Появится окно «Построитель запросов» (рис.5).
Рисунок 4. Диалог «Добавление таблицы»
4
Рисунок 5. Окно «Построитель запросов» в начальном состоянии – запрос еще не задан
o В окне построителя запросов мы собираемся создать запрос, в результате которого
из таблицы «Клиенты» будут выбраны два интересующих нас поля – «ФИО» и
«Код клиента». По полю «ФИО» мы собираемся выбирать клиента, а поле
«Код клиента» будет подставляться как внешний ключ. Для включения этих полей в
запрос достаточно в таблице, которая находится в верхней части построителя
запросов (рис.5) ,дважды щелкнуть по полю «ФИО», а затем по полю
«Код клиента». Результат показан на рис.6.
Рисунок 6. Окно «Построитель запросов» – запрос задан
o Можно убедиться в том, что запрос срабатывает так, как ожидалось. Для этого, не
закрывая окно построителя запросов, переключите его из режима «Конструктор» в
«Режим таблицы» (см. рис.7). Будет показан результат выполнения запроса (рис.8).
5
Рисунок 7. Изменение режима для построителя запросов
Рисунок 8. Результат выполнения запроса
o Закройте окно построителя запросов. Если появляется диалог сохранения запроса,
нажмите «Да». Запрос сохранится в свойстве «Источник строк» (рис.9). Текст
запроса
SELECT Клиенты.ФИО, Клиенты.[Код клиента] FROM Клиенты;
читается как «Выбрать все значения полей ФИО и [Код клиента] из таблицы
Клиенты». Имя поля «Код клиента» заключено в квадратные скобки, т.к. содержит
пробел.
Рисунок 9. Окно «Таблица» после задания подстановки.
6
o Остается из двух столбцов выбрать тот, который будет подставляться. Это столбец
«Код клиента», второй по счету (рис. 6, 8). Для этого поставьте цифру 2 в свойстве
«Присоединенный столбец» (рис.9).
o Работа по созданию подстановки закончена. Остается посмотреть, как используется
подстановка, созданная для поля Операции.[Код клиента]. Для этого перейдите в
режим таблицы (рис.10) и убедитесь, что подстановка в поле «Код клиента»
работает (сравните рис. 1 и рис. 11). Обратите внимание на выпадающий список в
поле «Код клиента».
Рисунок 10. Изменение режима для окна таблицы
Рисунок 11. Окно таблицы «Операции» с подстановкой в поле «Код клиента»
1.2. Подстановка ранее введенных значений
В таблице «Операции» (рис.11) имеется еще одна проблема – это ввод повторяющихся
значений в поле «Наименование». Если мы будем наращивать количество записей, то
наименования «Приобретение», «Продажа» «Обслуживание» будут повторяться, их
количество может увеличиваться. Если вводить такие тексты заново, возможны ошибки
(например, можно ввести слово «продажа» с прописной буквы, и оно будет отличаться от
введенного ранее слова «Продажа» с заглавной буквы). Стандартным решением этой
проблемы является устранение дублирования (нормализация) за счет создания отдельной
таблицы-справочника «НаименованиеОперации» и замене поля
«Операции.[Наименование операции]» на внешний ключ, который будет ссылаться на
первичный ключ таблицы «НаименованиеОперации».
Но есть и другое (более затратное, но тоже эффективное) решение – выбирать из списка
значений, ранее введенных в это поле. Для этого можно задать подстановку, как показано
на рис.12.
7
Рисунок 12. Окно таблицы «Операции» с настройкой подстановки для поля
«Наименование операции»
Обратите внимание на следующее:
o В качестве источника строк на этот раз используется не запрос, а таблица
«Операции». Выбрать нужную таблицу можно из выпадающего списка, нажав
кнопку (см. рис.12).
o Присоединенный столбец имеет номер 3 (это столбец «Наименование операции»),
т.е. выбор делается из ранее введенных значений этого же столбца.
o Число столбцов тоже равно 3, четвертый столбец «Характеристики операции»
игнорируется. Если задать число столбцов менее 3, то подстановка будет делаться
из первого столбца. Это означает, что на самом деле таблица, которая используется
в подстановке, тоже получается как результат запроса
SELECT
Операции.[Код операции],
Операции.[Код клиента],
Операции.[Наименование операции]
FROM Операции;
o Ширина столбцов задана в виде 0;0;5 (Access сам подставляет единицы
измерения).
Это означает, что первые два столбца («Операции.[Код операции]» и
«Операции.[Код клиента]») нас не интересуют. В выпадающем списке мы хотим
видеть только третий столбец.
o Для свойства «Ограничиться списком» задано значение «нет». Это означает, что
при вводе мы хотим добавлять новые значения поля «Наименование операции»,
если они раннее не встречались.
Результат использования подстановки показан на рисунке 13.
8
Рисунок 13. Окно таблицы «Операции» с подстановкой в поле «Наименование операции»
2. Создание связей
В базе данных Access можно определить набор связей между таблицами, которые
определяют логическую схему данных, и которые в дальнейшем будут учитываться в
разных целях:
o Для редактирования данных в таблицах и формах с учетом связей.
o Для создания форм, отчетов, которые учитывают логические связи между
различными частями базы данных.
o Для поддержания целостности данных при их редактировании, чтобы не была
нарушена логическая структура, определенная с помощью связей.
o Для экономного конструирования запросов с учетом имеющихся связей.
2.1. Определение связи «один ко многим»
Напомним, что в реляционной модели связь «многие ко многим» моделируется с помощью
дополнительной таблицы и двух связей «один ко многим». Поэтому в данном разделе, по
сути, рассмотрены способы реализации двух типов связей.
Рассмотрим способ определения связи «один ко многим». Делается это в специальном окне
«Схема данных». Для выхода в это окно нажмите кнопку
. Если схема еще не
задавалась, то появится окно «Добавление таблицы» (рис.14). Выберите из перечня те
таблицы, которые будут входить в схему. Обычно выбирают все таблицы. Нажмите
последовательно кнопки «Добавить» и «Закрыть». Появится окно схемы данных (рис.15).
Рисунок 14. Диалог «Добавление таблицы»
9
Рисунок 15. Окно «Схема данных» с таблицами, но без связей
В выбранных таблицах все подготовлено для создания связи – имеются первичные ключи
(выделены жирным шрифтом) и внешний ключ. Остается явно указать, что внешний ключ
«Операции.[Код клиента]» ссылается на первичный ключ «Клиенты.[Код клиента]». Для
этого в Access используется классический способ «перетаскивания» с помощью мышки
(Drag & Drop). «Возьмите» поле «Операции.[Код клиента]» и «сбросьте» его над полем
«Клиенты.[Код клиента]». Можно наоборот, «взять» поле «Клиенты.[Код клиента]» и
«сбросить» его над полем «Операции.[Код клиента]». Появится диалог «Изменение
связей» (рис. 16). Диалог уже заполнен, поэтому для определения новой связи достаточно
нажать кнопку «Создать».
Рисунок 16. Диалог «Изменение связей»
После этого в окне «Схема данных» (рис. 17) созданная связь отобразится графически.
Рисунок 17. Окно «Схема данных» с созданной связью
В нашем примере используется только две таблицы с одной связью. Для иллюстрации
ниже на рисунке 18 приведен пример схемы данных с несколькими таблицами и связями.
10
Рисунок 18. Окно «Схема данных» со связями между разными таблицами
2.2. Параметры связи
Обратите внимание на то, что графические изображения связей отличаются. На рисунке 18
можно выделить три вида связей. Разберемся, чем они отличаются.
Дополнительные параметры связи позволяют определить некоторые полезные детали. Это
обеспечение целостности данных и способ объединения записей.
2.2.1. Обеспечение целостности данных
Условиями целостности данных называют набор правил, которые Access использует для
поддержания допустимых межтабличных связей и запрета на случайное изменение или
удаление связанных данных.
Установка флажка «Обеспечение целостности данных» (рис. 16) заставляет Access
контролировать соответствие значений первичного и внешнего ключей так, чтобы любому
значению внешнего ключа нашлась запись с точно таким же значением первичного ключа.
Благодаря этому всегда можно найти соответствующую запись в главной таблице. Детали
этого процесса определяют флажки «Каскадное обновление связанных полей» и флажка
«Каскадное удаление связанных записей».
Установка флажка «Каскадное обновление связанных полей» (рис. 16) заставляет Access
при изменении первичного ключа изменять внешние ключи во всех связанных записях.
Если этот флажок не установлен, то изменение первичного ключа будет запрещено. Если
первичный ключ не имеет собственной семантики (например, если это счетчик – номер по
порядку), то целесообразно запретить его изменение. Если такая семантика имеется
(например, если ключом является номер счета, содержащий код региона, код учреждения,
код валюты и т.п.) и значение ключа может в будущем меняться, то целесообразно
установить флажок «Каскадное обновление связанных полей».
Установка флажка «Каскадное удаление связанных записей» (рис. 16) означает, что при
удалении записи из главной таблицы будут удалены все связанные записи подчиненной
таблицы. Когда этот флажок не установлен, то удаление записи из главной таблицы будет
запрещено, если имеются связанные записи в подчиненной таблице.
11
2.2.2. Параметры объединения
Если нажать кнопку «Параметры…» в диалоге «Изменение связей» (рис.16), появится
диалог «Параметры объединения» (рис.18), в котором можно настроить, каким образом
будет формироваться ответ на запрос связанных данных.
Рисунок 18. Диалог «Параметры объединения»
В качестве примера рассмотрим следующую ситуацию. Пусть целостность данных не
поддерживалась (не был установлен флажок «Обеспечение целостности данных»), в
результате чего в таблице «Операции» имеются записи, которые не привязаны ни к одному
клиенту (см. операцию с кодом 2 в таблице ниже). Кроме этого, в таблице «Клиенты» есть
записи, для которых еще не создано ни одной операции (см. клиента с кодом 3 в таблице
ниже).
Таблица «Клиенты»
Код клиента
1
2
3
Таблица «Операции»
Код операции
1
2
3
4
ФИО
Иванов
Петров
Сидоров
Код клиента
1
4
1
2
Наименование операции
Приобретение
Продажа
Продажа
Обслуживание
В результате запроса на выборку значений полей «Клиенты.[ФИО]» и
«Операции.[Наименование операции]» будут получены разные результаты в зависимости
от параметров объединения.
Ответ на запрос при объединении типа 1
Пропускается клиент с кодом 3 (Сидоров) и операция с кодом 2
ФИО
Наименование операции
Иванов
Приобретение
Иванов
Продажа
Петров
Обслуживание
В нашем примере этот тип объединения можно использовать, если нас интересуют только
те клиенты, которые проявляют активность по операциям.
12
Ответ на запрос при объединении типа 2
Пропускается клиент с кодом 3 (Сидоров) и операция с кодом 2
ФИО
Наименование операции
Иванов
Приобретение
Иванов
Продажа
Петров
Обслуживание
Сидоров
NULL
В нашем примере этот тип объединения можно использовать, если нас интересует
активность всех клиентов, даже если они не провели ни одной операции.
Ответ на запрос при объединении типа 3
ФИО
Наименование операции
Иванов
Приобретение
Иванов
Продажа
Петров
Обслуживание
Продажа
NULL
В нашем примере этому типу объединения можно придать смысл, если нас интересует,
каким клиентам соответствуют проведенные нами операции.
2.3. Определение связи «один к одному»
Связь «один к одному» используется достаточно редко. Если есть две таблицы, записи
которых связаны «один к одному», то чаще всего их можно свести в одну таблицу. Однако
связь «один к одному» иногда используется для экономии памяти, чтобы не хранить
пустые поля в основной таблице. Когда часть атрибутов должна задаваться не для всех, а
только для части экземпляров какой-либо сущности, то эти атрибуты выносятся в
отдельную таблицу, которая связывается с основной таблицей отношением типа «один к
одному». Другой пример использования связи «один к одному» - это вынесение в
отдельную таблицу тех атрибутов, которые заданы для всех записей, но редко
востребованы. В этом случае поиск в основной таблице ускоряется, если для него не
используются дополнительные атрибуты из вспомогательной таблицы.
Реализация связи «один к одному» отличается от связи «один ко многим» только одной
деталью: внешний ключ должен быть уникальным.
Рисунок 19. Окно таблицы «Детали клиента» с уникальным внешним ключом
13
На рисунке 19 в режиме конструктора показана таблица «Детали клиента», которая
предназначена для хранения дополнительной информации о некоторых (не всех) клиентах.
Обратите внимание на свойство «Индексированное поле» внешнего ключа
«Код клиента». Его значение «Да (Совпадения не допускается)» обеспечивает связь «один
к одному».
После связывания (см. раздел 2.1) полей «[Детали клиента].[Код клиента]» и
«Клиент.[Код клиента]» мы увидим следующий диалог.
Рисунок 20. Диалог «Изменение связей» со связью «один к одному»
Обратите внимание на нижнюю часть диалога, где указан тип отношения (связи).
Программа обнаружила, что внешний ключ уникален и определила, что речь идет о связи
«один к одному».
Обеспечение целостности и параметры объединения для связи «один к одному»
настраиваются аналогично связи «один ко многим» (см. раздел 2.2). Единственное отличие
состоит в том, что теперь уникальность внешнего ключа не позволит связать с записью
основной таблицы более одной записи подчиненной таблицы. Попытка создать еще одну
запись с тем же внешним ключом будет заблокирована. Кроме того, обеспечение
целостности потребует обязательного наличия записи в подчиненной таблице. Т.е. число
записей в двух таблицах должно будет совпадать.
3. Редактирование записей таблицы
Приступать к заполнению базы данных лучше всего после определения ее схемы. В
противном случае можно столкнуться с рядом трудностей, если для уже введенных данных
не выполняются нужные условия целостности.
Если структура таблиц задана, то можно выполнять операции с записями:
o Вставка записи – это создание записи в конце таблицы. Если используется
упорядочение записей по какому-то полю, то может показаться, что
o Обновление записи – это замена старой записи на новую, полученную после
модификации значений ее полей. Если обновленная запись не удовлетворяет
условиям целостности данных, то обновление будет заблокировано.
o Удаление записи – это ее удаление из таблицы. Условия целостности могут
запрещать удаление некоторых записей, или приводить к каскадному удалению
связанных с ней записей в других таблицах.
14
Для редактирования таблицы можно выбрать ее в окне базы данных (рис.21). По
умолчанию таблица открывается в режиме «Режим таблицы», где ее можно редактировать.
Рисунок 21. Окно базы данных
В случае, если имеются связи, стандартная форма редактирования таблиц может включать
связанные таблицы. Например, пусть задана схема, как показано на рисунке 22.
Рисунок 22. Окно «Схема данных»
В режиме редактирования таблицы «Клиенты» мы получим доступ к редактированию
связанной таблицы «Операции» (см. рис.23). Обратите внимание, что из таблицы
«Операции» выбираются только связанные записи.
15
Рисунок 23. Окно таблицы «Клиенты»
Если открыть таблицу «Операции», то доступа к связанным записям других таблиц не
будет, поскольку разным операциям может соответствовать один и тот же клиент (рис.24).
Рисунок 24. Окно таблицы «Операции»
Если же открыть таблицу «Детали клиента», то можно получить каскадный доступ к
редактированию связанных записей из других таблиц (см. рис.25).
16
Рисунок 25. Окно таблицы «Детали клиента»
4. Редактирование схемы базы данных
4.1. Редактирование полей таблицы
По мере заполнения таблиц могут обнаруживаться проблемы в настройках полей.
Например, может потребоваться изменение имени поля, проиндексировать его для
ускорения поиска, увеличить количество символов в текстовом поле, задать маску ввода и
т.п.
Для выхода в режим редактирования полей достаточно открыть таблицу и перейти в режим
«Конструктор» (см. рис.26).
Рисунок 26. Переключение режимов редактирования таблицы
На рисунке 27 показан уже знакомый пример окна таблицы в режиме «Конструктор».
17
Рисунок 27. Окно таблицы в режиме «Конструктор»
При редактировании полей следует учитывать две особенности
o Изменения могут противоречить ранее введенным данным. Например, если
необходимо задать свойство «Индексированное поле» в виде «Да (Совпадения не
допускаются)», то в данном поле не должно быть повторяющихся значений. В
противном случае такое изменении будет заблокировано. Другой пример –
сокращение размера текстового поля, которое может привести к урезанию текстов,
уже имеющихся в таблице.
o Изменения могут противоречить заданным связям. Например, задание изменение
типа внешнего ключа приведет к тому, что он не может быть сопоставлен с
первичным ключом, тип которого остался прежним.
4.2. Редактирование связей
Для изменения настроек связей используют окно «Схема данных». На рисунке 28 обратите
внимание, что одна из связей выглядит более жирной. Это текущая связь, которая
выделена с помощью щелчка мыши. Двойной щелчок выведет знакомое окно «Изменение
связей» (см. рис.29). Удалить текущую связь можно в окне «Схема данных», просто нажав
клавишу Delete на клавиатуре.
Рисунок 28. Окно «Схема данных» с выделенной связью «Клиенты» - «Операции»
18
Рисунок 29. Окно «Изменение связей»
Как и при редактировании полей, следует учитывать, что изменения параметров связей
может противоречить ранее введенным данным и в этом случае такие изменения будут
заблокированы.
Download