Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационные технологии.pdf
Скачиваний:
72
Добавлен:
08.04.2015
Размер:
3.39 Mб
Скачать

CВЯЗИ между таблицами

Связь «Один-ко-многим»

Обратимся к результату выполнения Упр. 2. Теперь, чтобы обозначить у сотрудника его принадлежность к отделу и к занимаемой должности, нужно указать соответствующие значения вторичных ключей [Код_Отдела] и [Код_Должности] в таблице Сотрудники. Ис-

пользуя значения этих вторичных ключей, можно узнать всю недостающую информацию (например, об окладе или рабочем телефоне) из соответствующих таблиц Должности и От-

делы.

Возникает вопрос: как сказать СУБД, что значения для внешнего ключа Код_Отдела нужно искать в таблице Отделы. Для правильной работы этого механизма необходимо построить Схему данных, отображающую взаимосвязи между таблицами, т.е. установить

СВЯЗИ между внешним ключом [Код_Отдела] в таблице Сотрудники и первичным клю-

чом [КодОтдела] в таблице Отделы. При этом, очевидно, что единственному, уникальному значению из ключевого поля [КодОтдела] в таблице Отделы может соответствовать много записей с этим же значением в таблице Сотрудники. Другими словами выполняется условие: В одном отделе работает много сотрудников. То же самое относится и к должности: Одну должность занимают разные сотрудники из разных отделов. Такой тип связи называется

«Один-ко-многим» (1→∞).

Дополнительно можно «поручить» СУБД поддерживать «целостность» такой связи. Это означает, что СУБД будет следить за значением внешнего ключа при создании или изменении любой записи в таблице, находящейся на стороне связи «-ко-многим», и проверять, есть ли запись в таблице на стороне «Один-» с таким значением первичного ключа. Если нет, то СУБД не позволит создать/изменить такую запись.

27

Например, нельзя сделать запись о новом сотруднике [Фамилия]=Волков в таблице Сотрудники в новой [Должность]=Главный бухгалтер из нового [Отдел]=Бухгалтерия, которых еще нет в соответствующих таблицах Должности и Отделы. Аналогично, нельзя удалить запись в таблице Отделы, если в таблице Сотрудники есть записи о сотрудниках, работающих в данном отделе.

Связи «Многие-ко-многим»

Если рассмотреть пример из упр.2 с другой стороны, то между таблицами Должности и Отделы возникает связь «Многие-ко-Многим» (∞↔∞). Она реализует условие, что много сотрудников с одной должностью могут работать в разных отделах. И наоборот: в одном отделе может работать много сотрудников с разными должностями. Реляционная СУБД не может обеспечить связь типа «Многие-ко-Многим» между двумя таблицами. Для этого ей необходима третья таблица, в которой будут установлены 2 связи типа «Один-ко-Многим»

(1→∞).

Например, в нашем случае такой третьей таблицей является таблицаСотрудники.

Связи «Один-к-Одному»

Если собрать дополнительные сведения у сотрудников (например, об образовании, увлечениях и т.д.), то для них можно создать дополнительную таблицу со связью «Один-к- Одному» (11) на основе первичного ключа [КодСотрудника].

28

УПР. 3. Создание связей

Задача: Определите и установите связи между таблицами так, чтобы информация в БД хранилась как единое целое в соответствии с примером на рис.1.

1.Закройте все открытые таблицы или конструкторы таблиц, так как создавать или изменять связи между открытыми таблицами нельзя.

2.На панели инструментов нажмите кнопку Схема данных или выберите пункт основ-

ного меню Сервис – > Схема данных.

3. Если в БД до этого никаких связей не определялось, автоматически будет открыто диалоговое окно Добавление таблицы. Если нужно добавить таблицы для создания связей, а диалогового окна Добавление таблицы на экране нет, нажмите кнопку Отобразить таблицу на панели инструментов. Если таблицы, между которыми нужно создать связь, уже ото-

бражены, перейдите к шагу 5.

4. Дважды щелкните имена таблиц, для которых требуется определить связи. Затем закройте диалоговое окно Добавление таблицы. Повторно добавленные таблицы можно скрыть. Для этого необходимо указать на них курсором и, вызвав контекстное меню правой клавишей мыши, выбрать команду Скрыть.

29

5. Выберите ключевое поле таблицы Отделы со стороны Один создаваемой связи и перетащите его, удерживая нажатой левую клавишу мыши, совместив с именем поля нужного

внешнего ключа таб-

лицы Сотрудники со стороны ко-многим.

В диалоговом окне

Изменение связей

включите флажок только для пункта

Обеспечение целостности данных.

См. рисунок слева.

30

6. Самостоятельно определите связь для оставшихся таблиц

(ДолжностиСотрудники).

В итоге Схема Дан-

ных должна выглядеть следующим образом (смотри рисунок слева).

31

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Что такое связь «один-ко-многим»?

2.Что такое связь «многие-ко-многим»?

3.Как реализуется связь «многие-ко-многим» реляционной БД?

4.Если таблицы А и В, имеющие связь типа «многие-ко-многим», связываются через таблицу С, то на стороне каких таблиц будет стоять «один», и каких – «многие»?

5.Что такое связь «один-к-одному»?

6.С какой целью может использоваться связь «один-к-одному»?

7.Как создать связь между таблицами в Access?

8.Может ли таблица быть связана сама с собой?

9.Как можно изменить и удалить связь в Access?

10.Зачем используется обеспечение целостности данных?

11.Как работает каскадное обновление связанных полей?

12.Как работает каскадное удаление связанных полей?

32

Объект ФОРМА – объект ввода и представления информации на экране

Под процессом обработки информации в ИС прежде всего понимаются следующие процедуры: ввод, просмотр, выборка некоторого подмножества данных, сортировка, группировка, изменение (исправление), расчет производных параметров и итогов. Все эти действия можно делать с помощью объекта СУБД Формы. Для одной таблицы может быть разработано сколько угодно форм в зависимости от поставленных задач обработки информации. При удалении формы удаляется процедура обработки, графическое оформление, но информация из БД не исчезает, так как хранится в объектах другого типа – в таблицах.

Чтобы ввести данные для нашего примера (см. рис.1), необходимо создать как минимум три формы: по одной форме для каждой таблицы, сконструированной в упр.2. При вводе информации необходимо учитывать, что таблица Сотрудники зависит от значений в полях [Код Должности], [Код Отдела] таблиц, где эти поля являются первичными ключами. Поэтому сначала с помощью форм заполняются таблицы, у которых в линии связи стоит «Один -». И только затем создаются и заполняются формы для таблиц, у которых в линии связи стоит «- Много».

Формы можно создавать двумя способами: с помощью конструктора и с помощью мастера. Механизм мастера относится к категории CASE технологий. Эта технология реализует концепцию «программирование без алгоритмического языка». Мы будем пользоваться мастером на начальном этапе построения, а затем переходить в конструктор, если потребуются изменения и дополнения.

33

УПР 4-ф. Создание форм Задача: Создайте формы для ввода информации БД Кадры по одной для каждой таблицы.

1.Выбираем в основном рабочем окне БД Кадры объект Формы.

2.Вначале создадим формы для таблиц, у которых в связи стоит «Один-».

3.Запускаем команду Создание формы с помощью мастера для создания формы на основе таблицы Должности.

4.Из поля со спи-

ска Таблицы и за-

просы выберите название таблицы

Должности

5.Переместите все поля из списка Дос-

тупные поля в окно списка Выбранные поля.

6.Нажмите кнопку

Далее

34

В общем случае, здесь можно выбирать все поля или только часть необходимых полей из одной таблицы, а также разные поля из разных таблиц.

Нельзя смешивать выбор полей из таблиц и запросов одновременно.

7. Выберите внешний вид для данной формы – ленточный.

На бланке (в один столбец) мы видим все поля только одной записи, а в таблице (табличный, ленточный) поля уместившихся на экране нескольких записей.

Для форм с малым количеством полей обычно выбирают табличное представление данных в виде ленточ-

ной или табличной формы.

Ленточный, в отличие от табличного вида, позволяет делать многоярусную таблицу и использовать зону примечаний для вычислений. Для форм с большим количеством полей используют представление данных в виде бланка (карточки) в

один столбец или выровненный.

35

8.Стиль формы (графическое оформление) выберите самостоятельно на основе своих предпочтений.

9.Назовите созданную форму «Штатное расписание». Имя формы всегда выбирайте (не доверяя мастеру), исходя из смысла решаемой задачи.

10.С помощью созданной формы заполните таблицу Должности контрольными данными из таблицы Отдел кадров (см. пример на рис. 1).

Обратите внимание, что в сущности Должности не должно быть дублирующихся записей. Это означает, что необходимо выбирать из примера неповторяющиеся значения должностей и связанных с ними окладов.

Обратите внимание, что для поля [Код Должности] требуется придумать значения кодов, так как их нет в примере на рис.1. Поле [Код Должности] – поле первичного ключа, поэтому все значения должны отличаться, иначе возникнет ошибка, связанная с условием на уникальность значения ключевого поля.

36

Строка с обозначением (звездочка) предназначена для новых данных.

Если кодификатор должностей специально не разрабатывается, то обычно применяют нумерацию по порядку, поэтому для таких полей часто выбирают Тип Счетчик (автонумератор).

11.Создайте форму «Структура организации» для таблицы «Отделы». Выберите все поля таблицы Отделы и вид - табличный.

12.Заполните таблицу Должности, используя созданную форму, тестовыми данными из таблицы Отдел кадров (см. пример на рис. 1). Необходимо выбрать из примера неповторяющиеся значения.

37

Обратите внимание, что при вводе информации о [Телефоне отдела] мы не пишем слово Доб (добавочный), т.к. для данного поля определен тип поля Текстовый и Размер 3 (символа). Три буквы Доб являются избыточными, повторяющимися во всех записях таблицы Отделы, их незачем хранить. Мы добавим эти символы в описании формата вывода в Упражнении 5

13.Создайте форму «Карточка сотрудника» для ввода информации в таблицу Сотрудники. Для данной формы выберите все поля таблицы Сотрудники и определите вид формы в один столбец.

14.Внесите данные обо всех сотрудниках, используя документ «Список сотрудников АКБ» (Задание 1), с помощью созданной формы.

38

При заполнении данной формы вам понадобится информация о кодовых значениях из таблиц Отделы и Должности. Для удобства откройте все три созданные формы и расположите их рядом на экране. Это позволит правильно вводить данные в поля [Код Отдела] и [Код Должности]

При заполнении полей [Пол] и [Семейное положение] необходимо опираться на созданные таблицы кодификаторов.

Если при заполнении тестовыми данными, в какой либо форме появятся ошибки, то закройте форму, затем удалите ее, исправьте ошибки в конструкторе таблиц, а затем, заново создайте эту форму.

39

Объекты ЗАПРОСЫ – объект построения временных таблиц с выбранной информацией

Объект запросы в СУБД используется для отбора отдельных полей одной или нескольких связанных таблиц, а также для выбора записей по некоторым логическим условиям. Запросы представляются как временно создаваемые таблицы и поэтому они могут служить источником данных для создания форм и отчетов. Запросы используют для создания структуры новой таблицы, исключения повторяющихся данных, создания перекрестных таблиц и т.д. Запросы также позволяют сгруппировать, обновить или удалить одновременно несколько записей, выполнить вычисления итоговых или новых значений полей. Запросы имеют два основных режима работы: построение схемы запроса с помощью визуального конструктора QBE на основе примера (один из видов CASE технологии в СУБД), отображение результата в виде таблицы с данными для просмотра. Альтернативным методом формирования запроса является написание его на специальном структурном языке (SQL). Мы будем пользоваться мастером построения запросов на начальном этапе, а затем переходить в конструктор QBE для задания различных условий отбора данных.

40