Методические указания к лабораторным работам для студентов специальности 210100 "Автоматика и информатика в технических системах"

Вид материалаМетодические указания
Лабораторная работа № 8 ОРГАНИЗАЦИЯ ДИНАМИЧЕСКИХ СВЯЗЕЙ МЕЖДУ ОТНОШЕНИЯМИ
1.Общие сведения
2. Задание на работу
Подобный материал:
1   2   3   4   5   6   7   8

Лабораторная работа № 8

ОРГАНИЗАЦИЯ ДИНАМИЧЕСКИХ СВЯЗЕЙ МЕЖДУ ОТНОШЕНИЯМИ


Цель работы: изучить структуру и возможности команд по организации динамических связей между отношениями типа 1:1 и 1:М языка манипулирования данными СУБД реляционного типа FoxPro и приобрести навыки по использованию этих команд для реализации отчетных форм в ИСС .

1.ОБЩИЕ СВЕДЕНИЯ


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

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

Возможно установление двух типов связей между записями двух сцепленных баз данных. Связь типа одна-запись-к-одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если они есть) остаются "незамеченными". Такая связь устанавливается командой SET RELATION. Связь типа одна-запись-ко-многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Такая связь реализуется парой команд SET RELATION и SET SKIP TO. Оба типа связей могут быть распространены на несколько баз сразу.

Формат команд, устанавливающих связь вида одна-запись-к-одной, имеет следующий вид:

SET RELATION TO <ключ> INTO <область>
[,<ключ> INTO <область>...][ADDITIVE]

Команда связывает указатель записи в активной рабочей области с указателями записей из других рабочих областей, которые размещены после слова INTO, по заданному общему полю <ключу>. Единственное условие – файл, с которым устанавливается связь, по этому полю должен быть проиндексирован.

Например, есть две базы, в первой из которых хранятся общие сведения о сотрудниках (все сотрудники) кафедры (BAZA), а во второй – информация о плановой и фактической нагрузках по семестрам для преподавателей (ППС).

BAZA.DBF (все члены кафедры)




BND.DBF



ONF1, ONP1 – фактический и плановый объем нагрузки на дневном отделении по первому семестру; ONF2, ONP2 – по второму семестру; ONF,ONP – общий объем.

Для того чтобы посмотреть состояние дел с учебной нагрузкой по каждому преподавателю кафедры, следует выполнить следующий командный файл:

SELECT A
USE BND
USE BAZA INDEX ITABN IN B
SET RELATION TO TABN INTO B
LIST TABN, B.FIO, ONF1, ONP1, ONF2, ONP2
(BROWSE FIELDS B.FIO,ONF1, ONP1, ONF2, ONP2)

В этом примере установлена связь следующего вида



Можно установить связи с несколькими базами одновременно. Если со старшим файлом, который уже связан с другим, необходимо связать некоторый третий (четвертый и т.д.), следует во все последующие команды SET RELATION включить слово ADDITIVE, которое обеспечивает сохранение связей, установленных ранее.

Связь между всеми файлами разрывается командой SET RELATION TO без параметров. Связь с отдельным файлом в заданной <области> разрывается командой SET RELATION OF INTO <область>.

Рассмотрим пример связи с несколькими базами. Пусть есть база, в которой хранятся сведения о нагрузке на заочном отделении. Необходимо в BNZ.DBF посмотреть для каждого преподавателя объемы нагрузки, фактические и общие. Это можно сделать следующим командным файлом:

BNZ.DBF



USE BAZA

SET FILTER TO KDOLK <=5

USE BND IN B INDEX ITABND

USE BNZ IN C INDEX ITABNZ

SET RELATION TO TABN INTO B, TABN INTO C

BROWSE FIELDS FIO, B.ONF, C.ONF, ZN=B.ONF+C.ONF

В этом примере установлена связь следующего вида:



Следующая команда устанавливает связь вида одна-запись-ко-многим между двумя или несколькими базами данных:

SET SKIP TO [<обл.1>[,<обл.2>]...].

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

Прежде чем использовать команду SET SKIP TO, необходимо выполнить начальное сцепление вида одна-запись-к-одной командой SET RELATION. Удаление связи вида одна-запись-ко-многим осуществляется командой SET SKIP TO без параметров.

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

DET.DBF



SELECT A

USE BAZA

USE DET IN B INDEX ITABN

SET RELATION TO TABN INTO B

SET SKIP TO B

BROWSE FIELDS FIO, B.FIO, B.DR

В команде BROWSE клавиши , доступны, но они действуют только на старшую базу. Повторяющиеся записи в старшей базе отображаются "заполненными".

В этом примере установлена связь следующего вида:



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



USE BAZV IN A
USE BAZF IN B INDEX IKODVF
USE BAZC IN C INDEX IKODFC
USE BAZK IN D INDEX IKODCK
USE BAZST IN E INDEX IKODCS
SELECT A
SET RELATION TO KODV INTO B
SET SKIP TO B
SELECT B
SET RELATION TO KODF INTO C
SET SKIP TO C
SELECT C
SET RELATION TO KODC INTO D
SET SKIP TO B
.
.
.
SET RELATION TO KODC INTO F ADDITIVE

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

2. ЗАДАНИЕ НА РАБОТУ


2.1. Используя учебные пособия [4–15], материал первого раздела данной лабораторной работы, системную документацию по СУБД или информационную подсистему по языкам СУБД в автоматизированной справочной системе NG, изучить структуру и возможности команд для организации динамических связей между отношениями.

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

2.3. Разработать командный файл, реализующий динамические связи вида 1:1 и 1:М и обеспечивающий возможность получения отчетных форм на бумажном носители (по одному отчету для каждого вида связи).

2.4.Представить текст командного файла и отчетные формы к защите.