Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Болотская Методическое пособие по выполнению лабораторных 2010

.pdf
Скачиваний:
20
Добавлен:
16.08.2013
Размер:
551.51 Кб
Скачать

Файлы создаются с помощью оператора (глагола) createfile. Например,

create-file Team 1 1

при этом одновременно создается словарь файла и область данных файла.

Из рис. 3.2 видно, что эти два файла связаны двумя мостами (bridge) от файла «Play» к файлу «Team». Мосты – специальные триггеры, которые срабатывают при сохранении записи об очередной игре в файле «Play» и заносят ссылку на эту игру в записи файла «Team», представляющие каждую из команд, принимавших участие в игре. Ссылка, заносимая в записи файла «Team», – идентификатор записи об игре в файле «Play». Мосты кодируются в записях описания файлов (File Defining Item FDI), в данном случае в записи описания файла «Play».

Работа с записями описания файлов. На рис. 3.3 и 3.4 показа-

ны фрагменты записи описания файлов «Play» и «Team». Для работы с записями словарей нужно использовать макрос ud (update dictionary). Например, чтобы просмотреть и/или изменить запись описания файла «Play» (см. рис. 3.3), нужно выполнить команду:

:ud Play ‘Play’

Часть атрибутов этой записи формируется при создании файла, из-

менению подлежат атрибуты correlative, macro, outputmacro.

Особое внимание надо уделить атрибуту correlative, в котором описывается способ формирования ключей записей области данных файла, а также триггеры, связанные с файлом. Напомним, что СУБД D3 поддерживает многозначную модель данных. Это значит, что любой атрибут априорно считается многозначным, если не указано противное. Это полностью относится и к атрибуту cor-

relative.

31

dictionary-code

D

base

13683

modulo

1

structure

 

retrieval-lock

 

update-lock

 

output-conversion

ida1

correlative

 

bTeam;2;3

attribute-type

bTeam;3;4

L

column-width

10

input-conversion

ID_Play t1 t2 z1 z2

macro

output-macro

 

 

Рис. 3.3. Запись описания файла «Play»

 

 

dictionary-code

D

base

13687

modulo

1

structure

 

retrieval-lock

 

update-lock

 

output-conversion

id5

correlative

attribute-type

I13689a1

L

column-width

10

input-conversion

TeamName PlayD GdD SochD PlayG GdG

macro

 

SochG PlayW GdW SochW *-70 plD chD ochD

output-macro

*-70 plG chG ochG *-70

TeamName plD GdDL SochL plG GDGL

 

SochGL PlayW GdWL SochWL CountPlays

 

countplaysH

Рис. 3.4. Запись описания файла «Team»

Из рис. 3.3 видно, что первым значением атрибута correlative является «ida1». Это комбинация кода обработки «id» и кода обработки «a». Код обработки «id» генерирует ключ записи области данных файла, а код обработки «a» указывает способ генерации – ключ формируется алгебраическим выражением, сле-

32

дующим за кодом «a». В данном случае за кодом «a» следует «1», т.е. в качестве ключа принимается значение первого поля записи. Это значит, что первое поле должно содержать единственное значение, которое при сохранении записи принудительно копируется в нулевое поле.

Вторым значением атрибута correlative в записи описания файла «Play» (см. рис. 3.3) является «bTeam;2;3». Раскроем смысл этого выражения. Код «b» говорит, что указанное выражение представляет мост (bridge) из файла «Play» в файл, имя которого непосредственно следует за «b», т.е. файл «Team». Цифра «2» представляет номер поля в записи файла «Play», в котором находится ключ записи файла «Team», в данном случае – идентификатор команды «хозяина» игры, т.е. команды, на поле которой проходила игра. Цифра «3» представляет номер поля в записи файла «Team», в которое будет помещен ключ записи файла «Play» в результате срабатывания триггера (моста). Поле 3 записи файла «Team» – многозначное, в нем находятся идентификаторы всех игр, которые команда провела «дома».

Третье значение атрибута correlative в записи описания файла «Play» (см. рис.3.3) также представляет мост «bTeam;3;4». В данном случае цифра «3» представляет номер поля в записи файла «Play», в котором находится ключ записи файла «Team», – идентификатор команды «гостя», т.е. команды, играющей на поле хозяина. Цифра «4» представляет номер поля в записи файла «Team», в которое будет помещен ключ записи файла «Play», в результате срабатывания триггера (моста). Поле 4 записи файла «Team» – также многозначное, в нем находятся идентификаторы всех игр, которые команда провела «в гостях».

Обратите внимание на атрибут correlative в записи описания файла «Team» (см. рис. 3.4).

Первое значение этого атрибута – id5 – говорит о том, что записи в области данных файла «Team» имеют ключи (идентификаторы команд), которые генерируются автоматически путем прибавления 1 к последнему сгенерированному ключу. В данном случае (см. рис. 3.4) последний сгенерированный ключ есть 5, поэтому при вводе следующей записи с описанием команды ее ключом будет 6.

33

Второе значение этого атрибута – I13689a1 – генерируется СУБД D3 автоматически при определении индекса. В данном случае это значение говорит о том, что на первом поле определен индекс.

Помимо атрибута correlative в записях описания файлов желательно заполнить атрибут macro и output-macro. Их можно не заполнять, например в записи описания файла «Play» (см. рис. 3.3) атрибут output-macro не заполнен.

В этих атрибутах через пробел перечисляются атрибуты разрабатываемого файла, которые процессорами D3 используются по умолчанию. Атрибут macro используется UPDATE-процессором. Например, команда D3:

:u Play ‘121’

эквивалентна команде

:u Play ‘121’ ID_Play t1 t2 z1 z2

Следует иметь ввиду, что приоритет отдается программной строке, т.е. команда:

:u Play ‘121’ ID_Play t1 t2

будет обрабатывать только три, явно заданные в строке атрибуты. Атрибут output-macro используется ACCESS-процессором, применяемым для генерации отчетов. Если же он – пустой (см. рис. 3.3), ACCESS-процессор будет использовать атрибуты из

macro:

:list Play

эквивалентна команде

:list Play ID_Play t1 t2 z1 z2

Работа с записями описания атрибутов. На рис. 3.5а и 3.5б

показаны фрагменты записи описания атрибутов файла «Team». Напомним, что записи описания атрибутов находятся (сохраняются) в словарях файлов (в данном случае «DICT Team»). Для рабо-

34

ты с записями словарей нужно использовать макрос ud (update dictionary). Например,

:ud Team ‘TeamName’

DICT Team ‘TeamName’size = 53

dictionary-code

a

attribute-count

2

substitute-header

Команда:

structure

 

output-conversion

 

correlative

l

attribute-type

column-width

10

Рис. 3.5а. Фрагмент записи описания «хранимого» атрибута

Чтобы работать с записью описания вычисляемого атрибута с именем «Gdd» («Мячи дома»), нужно выполнить команду:

:ud Team ‘Gdd’

DICT Team ‘Gdd’ size = 93 dictionary-code a attribute-count 2 substitute-header Мячи дома structure d;1 output-conversion correlative

a;s(3(tPlay;x;;4)):":":s(3(tPlay;x;;5)) attribute-type r

column-width 2 input-conversion x

Рис. 3.5б. Фрагмент записи описания «вычисляемого» атрибута

Отметим, что имена атрибутов «TeamName» и «Gdd» есть ключи записи описания атрибута в файле «DICT team», при этом ка-

35

вычки при обращении к описанию атрибута можно опускать, т.е. запись команды:

:ud Team Gdd

также будет правильная.

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

Атрибут «dictionary-code» определен на поле 1 записи описания атрибута и должен иметь значение «a» – код, указывающий, что это запись описания атрибута (для области данных файла).

Замечание. В словаре файла определяем атрибуты для области данных файла. Атрибуты для словаря файла, в частности «dictionary-code», определяются в словаре более высокого уровня, а именно главном словаре базы данных (счета) – «master dictionary», для которого предназначен файл «md» (см. рис. 3.6). Попробуйте выполнить команду:

:ud md ‘dictionary-code’

md

Dict team

Data team

Рис. 3.6. Иерархия описания атрибутов

Атрибут «attribute-count» определен на поле 2 записи описания атрибута и вводит номер поля в записи области данных,

36

для которого определяется этот атрибут. В данном случае (см. рис. 3.5а, 3.5б) это поле 2.

Атрибут «substitute-header» определен на поле 3 записи описания атрибута и вводит заголовок, под которым атрибут выводится в отчетах. В данном случае (см. рис. 3.5а, 3.5б) это «Мячи дома».

Атрибут «structure» определен на поле 4 записи описания атрибута и вводит код, который определяет зависимость атрибутов записи области данных. В данном случае это «d;1», который определяет, что этот атрибут зависит от атрибута, определенного на поле 1, у которого в «structure» стоит код «c;2». Если эти атрибуты многозначны, то, используя эти атрибуты при обработке данных, мы фактически имеем дело с таблицей, включенной в запись области данных.

Атрибут «output-conversion» определен на поле 7 записи описания атрибута и вводит код преобразования значения поля, который срабатывает непосредственно перед выводом на экран или печать. В данном случае (см. рис. 3.5а, 3.5б) в этом атрибуте значение не определено.

Атрибут «correlative» определен на поле 8 записи описания атрибута и вводит код преобразования значения поля, который срабатывает непосредственно перед использованием атрибута в любом преобразовании. В данном случае (см. рис. 3.5б) в этом атрибуте стоит алгебраическое преобразование:

a;s(3(tPlay;x;;4)):":":s(3(tPlay;x;;5))

Это преобразование достаточно сложно и его целесообразно объяснять, когда будут понятны его составляющие.

Атрибут «attribute-type» определен на поле 9 записи описания атрибута и вводит тип атрибута. Интересны два значения:

«r» – строка сдвинута вправо (если она состоит из цифр, то интерпретируется как число);

«l» – строка сдвинута влево.

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

37

Атрибут «column-width» определен на поле 10 записи описания атрибута и вводит ширину столбца при выводе в табличном формате.

Атрибут «input-conversion» определен на поле 14 записи описания атрибута и вводит код входного преобразования. В данном случае (см. рис. 3.5б) это «х». Такой код означает, что атрибут вычисляется, а не соответствует значению, хранимому в поле 2 записи области данных.

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

3.2.Лабораторная работа 2. Использование кодов обработки в многозначных базах данных

Из краткого описания предметной области и соответствующих файлов видно, что большинство атрибутов файла «Team» являются вычисляемыми. Для определения вычисляемых атрибутов используются коды обработки, они позволяют построить системы средней сложности, практически не прибегая к программированию.

Коды обработки полностью описаны в электронном учебном пособии (база «lectur» в D3), а также доступны «on-line» при определении атрибутов. Однако целесообразно разобрать хотя бы несколько примеров.

Чтобы быть более конкретными, давайте разберем выражение, определяющее значение атрибута «Gdd» – «Мячи дома»:

a;s(3(tPlay;x;;4)):":":s(3(tPlay;x;;5))

Это – алгебраическое выражение, на что указывает код «a;». Алгебраической операцией в данном случае является операция конкатенации строк – «:». Заметим, что ":" в этом выражении это тоже строка.

Первая часть этого выражения s(3(tPlay;x;;4)) говорит о том, что суммируются значения многозначного поля 3, предварительно преобразованные.

38

О суммировании говорит код «s», который применяется к выражению 3(tPlay;x;;4). Напомним, что в поле 3 записи файла «Team» хранятся идентификаторы игр, проведенных командой на своем поле. Складывать идентификаторы игр просто нелепо, их надо преобразовать.

Код tPlay;x;;4 называется «трансляцией через файл» и применяется он к каждому значению многозначного поля 3 записи файла «Team» (игр на своем поле может быть много). В терминологии реляционной модели происходит эквисоединение файлов «Team» и «Play» с проекцией на поле 4 файла «Play». Напомним, что в этом поле файла «Play» хранится количество мячей забитых «хозяином».

Оставшаяся часть выражения объясняется аналогично. Результат всех преобразований, выполненных этим алгебраиче-

ским выражением – скалярная строка, например «16:10». Этот результат говорит, что команда, играя на своем поле, забила во всех играх 16 мячей, а пропустила – 10.

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

Возникает вопрос: «Почему атрибут «Gdd» (см. рис. 3.5б) определен на поле 2 записи файла «Team», хотя для его определения значение поля 2 не используется?» Напомним, что в поле 2 хранится название футбольной команды.

Самая главная причина – этот атрибут по семантике однозначен, поэтому он должен быть обязательно определен на однозначном поле. Очень часто для этого используется поле 0, которое всегда однозначное. Вторая причина – удобство построения ассоциаций. Так как система «Футбольный чемпионат» доступна (она входит в базу «К9», предоставляемую студентам), попробуйте определить атрибут «Gdd» на поле 3 файла «Team», которое многозначно. Получите многозначный результат, проверьте какой.

4 correlative

a;s(3=3).

 

39

Как уже говорилось, коды обработки доступны «on-line» при определении атрибутов. При определении атрибута (см. рис. 3.5а и 3.5б), когда курсор стоит на определенной строке, нажав F1 или CtrlX,1, получим список кодов, которые могут быть использованы при формировании этой строки. Пусть, например, курсор стоит на строке «output-conversion». Нажав F1, получим экран со списком кодов, представленный на рис. 3.7.

Всю информацию, связанную с использованием конкретного кода, можно получить, встав курсором на соответствующую строку и нажав F1.

a Алгебраические преобразования в обычной записи c Конкатенация

call Конверсия с помощью подпрограммы пользователя d Конверсия дат

fАлгебраические преобразования в обратной польской записи

gВыделение групп

if Конверсия с использованием условий

lДлина строки либо вывод строки заданной длины

mКонверсия цифровых величин и строк с помощью маски

mc Семейство специальных конверсий буквенно-цифровых строк

mp Десятичная упаковка

ms Изменение последовательности сортировки mt Конверсия времени

mx Конверсия ASCII ───> HEX my Конверсия HEX ───> ASCII

oСортировка значений многозначного атрибута

pСовпадение с шаблоном

rЧисловой Интервал

sПодстановка

text.extract Выделение подстроки translate Трансляция через файл

Рис. 3.7. Коды обработки, используемые в атрибутах

«output-conversion» и «correlative»

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]