На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

2
Ожидается:
16 Июня 2024

Графический навигационный конструктор запросов для реляционных баз данных

Статья опубликована в выпуске журнала № 1 за 1991 год.
Аннотация:
Abstract:
Авторы: Рыбкин В.М. () - , Минин С.В. () - , Худяков С.В. () -
Ключевое слово:
Ключевое слово:
Количество просмотров: 12576
Версия для печати

Размер шрифта:       Шрифт:

В реляционных базах данных для составления сложных запросов (фильтров в системе интеграции неоднородных баз данных, выражений в языке SQL, программ для dBASE III) пользователь должен быть достаточно высококвалифицированным специалистом. Чтобы сформулировать запрос на языке высокого уровня (типа исчисления отношений или SQL), пользователь подсознательно ориентируется на то, как этот запрос будет реализован (например, какая последовательность операций реляционной алгебры соответствует запросу). Непростой задачей является и формулирование запроса, логика которого еще четко не формализована и представлена фрагментарно на естественном языке.

Технология составления запросов в реляционных БД может быть реализована с использованием объектно-ориентированного подхода на принципиально новом уровне. При этом схема БД представляется на дисплее графически, и процесс составления запроса сводится к манипуляции визуальными объектами-схемами отношений (например посредством раскраски требуемых атрибутов и прокладки путей (связей) между отношениями). Системе подобного типа можно предоставить возможность экспертной подсказки, что существенно облегчит процесс составления заранее не сформулированных запросов. Такой объектно-ориентированный инструментальный комплекс, реализованный на персональном компьютере, называется графическим навигационным конструктором запросов для реляционных баз данных — RELATIONAL DESIGNER.

Автономный программный комплекс RELATIONAL DESIGNER предназначен для конструирования запросов к реляционным БД в режиме интерактивной графической навигации. На экране представляется графическое изображение схемы реляционной БД, на которой средствами управления курсором, цветом и функциональными клавишами можно сформировать результирующее отношение и сформулировать запрос, селектирующая мощность которого соответствует стандарту SQL2. После того, как запрос сформулирован, он автоматически транслируется в запрос на SQL для ORACLE или dBASE IV, запрос на QUEL для INGRES транслируется в программу для dBASE III, в фильтры языка определения отношений с переменными на доменах системы интеграции неоднородных баз данных и знаний.

При работе с конструктором запросов, который находится в рамках текущего каталога, необходимо образовать подкаталоги: SCH — для хранения схем БД в текстовом и объектном представлении;

QRY — для хранения запросов в исходном представлении;

RES — для хранения оттранслированных запросов в текстовом представлении.

В каждом каталоге могут находиться два файла с одинаковым именем: один с расширением, совпадающим с именем каталога для хранения последней версии, другой с расширением .bak для хранения предыдущей версии.

Описание главного меню

Главное меню (рис.1) содержит:

—   работу со схемами баз данных (SCHEMES);

—   визуализацию схемы БД и конструирование запросов к БД (VIDEO);

—   трансляцию сконструированного запроса в требуемый выходной язык (TRANSLATION).

SCHEMES обеспечивают ввод схем баз данных, их редактирование, перевод в объектное списковое представление и хранение в текстовом и объектном видах.

VIDEO обеспечивает визуализацию вызванной схемы в графическую форму представления, составление запроса при помощи навигационного графического интерфейса и хранение построенного запроса в объектном представлении.

TRANSLATION осуществляет трансляцию графически построенного запроса в выходной язык.

При работе со схемами используется подкаталог SCH текущего каталога. При выборе пункта SCHEMES осуществляется переход в окно схем (рис.2) и появляется вспомогательное меню, содержащее пункты: NEW — очистка экрана и подготовка к вводу новой схемы БД;

<  последовательность         описаний          отношений > :: = -

<  описание отношения > ! < после до вательность описаний отношений >; < описание отношения >

<  описание отношения> :: = < имя отношения > ( < список атрибутов > }

<  список атрибутов >::= <атрнбут> !<список атрибу тов:* ,<атрибут>

<  атрибут > ::— <имя атрибута > !<нмя атрибута > # <опнсанне связей> :: = LINKS <последовательность описа ний связей>

<последовательность описаний связей>:: — <описание связи > ! < последовательность              описаний свя-

зей > ; < описание связи >

< описание связи >:: = < имя снаэи >: < имя отноше ния >(< список имен атрнбутов>)+<кмя отноше ния > (< список имен атрибутов >).

При описании отношений символом # отмечаются ключевые атрибуты — так в схеме БД задаются семантические связи отношений, существующих между атрибутами одинакового типа и смыслового содержания. Эти связи, впоследствии изображенные графически, помогают составлять запросы, использующие несколько отношений. Например, если в схему отношения ИЗДЕЛИЕ входит атрибут ШИФР_КОМП-

LOAD — загрузка текстового представления схемы, нмя которой задается в последующем информационном табло. По умолчанию выбирается файл с расширением SCH, после чего возможно редактирование вызванной схемы в режиме текстового редактора; SAVE — сохранение текстового представления схемы в подраздел SCH с расширением SCH. При наличии файла с таким именем он получает расширение .bak;

OBJECT — трансляция схемы из текстового в объектное представление с последующей графической визуализацией. В информационном табло указывается имя, под которым оттранслированная схема помещается в подраздел SCH с расширением OBJ; если имя не указывается, по умолчанию берется имя исходной схемы.

Синтаксис языка описания схем имеет следующий вид:

<  Описание схемы >::= < описание атрибутов > < описание отношений > < описание связей >

<  описание атрибутов > :: = ATTRIBUTES < последова тельность описании атрибутов5

<  последовательность описаний атрибутов >::— <описанне атрибута >! < последовательность описаний атрибу тов > ; < описание атрибута >

<  описание атрибута > ::= < нмя атрибута >,-с тип5 ■ [:< длина значения >]

<описанне отношений> ;: = RELATIONS <последователь-ность описании отношений >

ЛЕКТУЮЩЕГО, а в схему отношения ДЕТАЛЬ входит атрибут ШИФР_ДЕТАЛИ, то связь П:ИЗДЕЛИЕ(ШИФР_КОМПЛЕКТУЮЩЕГО)

+ ДЕТАЛЬ(ШИФР_ДЕТАЛИ) может быть использована в запросе по разузло-ванию изделий, позволяя извлекать список деталей из данного изделия.

Режим графического конструирования запросов

При работе в этом режиме используются подкаталог SCH со схемами БД в объектном представлении и подкаталог QRY, в котором хранится объектное представление графически построенных запросов. Переход в этот режим осуществляется посредством выбора пункта VIDEO основного меню. При этом осуществляется переход в режим визуализации, в котором действуют, кроме своего меню, и специальные команды, реализованные функциональными клавишами (рис. 3). Меню визуализации составляет:

NEW QUERY — начать конструирование запроса; при этом появляется информационное меню для задания имени схемы БД. После указания имени схемы вызывается соответствую-

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

LOAD QUERY — загрузить сконструированный ранее и сохраненный s подкаталоге QRY (в виде файла с qry-расширением) запрос и графически отобразить его на визуализированной схеме. При этом запрос хранится в объектном представлении, пригодном для графической визуализации. При выборе LOAD QUERY появляется информационное меню для задания имени запроса и имени схемы БД. После задания этих имен происходит визуализация объектного представления схемы, на которое накладывается визуальное изображение запроса в том виде, в каком оно находилось в момент конструирования перед сохранением запроса (SAVE QUERY). LOAD QUERY используется для редактирования сконструированных ранее запросов.

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

DNF — распахнуть окно для задания поисковых логических выражений в виде дизъюнктивной нормальной формы (поисковых условий), а также арифметических выражений и функций для формирования вычисляемых атрибутов. Возврат из окна ESC.

SAVE QUERY — сохранить сконструированный запрос в объектном представлении в виде файла в QRY подкаталоге. Появляется информационное меню для задания имени файла (по умолчанию с qry-расширением). Предыдущая версия файла с таким же именем получает расширение .bak.

ERASE — стереть сконструированный запрос, оставляя на экране визуализацию схемы БД.

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

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

Ключевые атрибуты помечены знаком #. Семантические связи между отношениями, осуществляемые при помощи атрибутов-синонимов, изображены стрелками. Если все визуальное изображение схемы не помещается в окне, возможно перемещение изображения влево и вгфаво, вниз и вверх с помощью клавиш управления курсором. Такое наглядное визуальное изображение схемы БД позволяет конструировать запросы в стиле объектно-ориентированного подхода.

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

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

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

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

Начало конструирования каждого фрагмента начинается с команды фиксирования исходного отношения командой FIX.

При конструировании запроса в окне TARGET формируется схема результирующего отношения, над которой также можно применять некоторые команды конструирования. В окне DNF отдельно в текстовой форме записываются логические и арифметические выражения, используемые во фрагментах запроса.

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

Приводим краткое описание команд конструирования запросов. Одновременное нажатие CTRL и функциональной клавиш отменит соответствующую команду.

Команда фиксации отношения FIX (F2)

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

Команда выбора цвета для отметки атрибутов SET (F9)

Текущее положение курсора запоминается, он перемещается к шкале цветов на первую из нераскрашенных позиций. После нажатия клавиши ПУСК (ENTER) данный цвет фиксируется в качестве текущего, а курсор возвращается на старое место. При этом нераскрашенная позиция шкалы цветов раскрашивается соответствующим цветом, который становится текущим и который можно использовать для раскраски атрибутов в схемах отношений. Кроме того, с данным цветом можно связать условие поиска, арифметическое выражение или функцию, в которых будут участвовать атрибуты, раскрашенные этим цветом. Раскрашенные текущим цветом атрибуты можно также отправлять в результирующее отношение.

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

Раскраска атрибута текущим цветом COLOR (F3)

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

Если фиксации (FIX) отношения до этого не было, то при выполнении команды COLOR над текущим атрибутом автоматически выполняется и команда фиксации (FIX) данного отношения, в которое входит текущий атрибут.

Направление атрибута в результирующее отношение TARGET (F4)

Текущий атрибут, на который указывает курсор, помещается в результирующее отношение вслед за атрибутами, уже находящимися там. Если после данной команды, перейдя в главное меню (F10), открыть окно TARGET, то в визуальном изображении результирующего отношения появляется помещенный атрибут. Связь отмеченных текущим цветом атрибутов с логикой запроса DNF (F5)

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

логическое выражение, начинающееся с указанной метки, автоматически распахивается. Связь двух отношений в один запрос LINK (F6)

Эта команда позволяет связать два фиксированных отношения или фрагмента запроса в один (одно дерево запроса). При этом можно связать как отношения, между которыми в схеме БД по каким-то атрибутам установлены семантические связи, так и отношения без таких связей.

Рассмотрим различные варианты применения этой команды. Пусть между двумя отношениями R1 и R2 в схеме БД имеются семантические связи по атрибутам al и Ы в R1; а2 и Ь2 в R2. Порядок связывания R1 и R2 в один запрос, например по атрибутам соединения al и а2, таков: фиксация FIX отношения R1, раскраска в нем текущим цветом атрибута соединения al, затем фиксация отношения R2 и раскраска в нем тем же цветом атрибута соединения а2. После этого выполняется команда LINK. При этом в окне визуализации стрелка, соответствующая семантической связи R1 ** R2 по атрибутам al и а2, окрашивается таким же текущим цветом. В отношении R2 раскраска атрибута а2 необязательна — можно сразу выполнять команду LINK, которая автоматически выберет атрибут а2 по семантической связи между al и а2. В шкале цветов рядом с текущим цветом появляется информационное сообщение LINK.

Такое связывание двух отношений соответствует реляционной операции join. Если после этого не будет связи данного текущего цвета с логическим выражением над атрибутами соединения al и а2, то такая связь соответствует операции естественного соединения (natural join); если с раскрашенными атрибутами соединения al и а2 связать логическое условие типа al> =

Следующий этап — отношения R1 и R2 включаются в дерево запроса с соответствующей информацией о типе связи между ними. Аналогично происходит связывание этих отношений, если они входят в два ранее построенных фрагмента запросов; при этом оба фрагмента соединяются в единое дерево запроса своими вершинами, соответствующими R1 и R2.

Если выполнить связывание R1 и R2 без предварительной раскраски семантически связанных атрибутов, т.е. после фиксации R1 и R2 выполнить команду LINK, то связывание произойдет по всем атрибутам, между которыми имеется семантическая связь. В рассмотренном примере это связывание произойдет по паре атрибутов (al,bl) в R1 и (а2,Ь2) в R2 в том случае, если предположить, что они являются атрибутами соединения. При этом они автоматически окрасятся в новый цвет, выбранный в шкале цветов, стрелки семантических связей тоже окрасятся в этот цвет, и в шкале цветов возле нового цвета появится информационное сообщение LINK.

При связывании R1 и R2, для которых не существует семантических связей в схеме БД, команда LINK выполняется сразу после фиксации этих отношений без предварительной раскраски. При этом в окне визуализации между R1 и R2 проводится стрелка инверсного цвета, отличного от палитры цветов в шкале и от цвета семантических стрелок. Такое связывание равносильно реляционной операции декартова произведения.

Формирование вычисляемого атрибута FORM(F7)

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

Перед выполнением команды FORM необходимо раскрасить атрибуты, участвующие в арифметическом выражении. Это могут быть атрибуты одного или нескольких отношений, входящих в построенный фрагмент запроса. Вычисление агрегатной функции AGTFIV (FS)

При выполнении данной команды происходит вычисление агрегатной функции (MIN, MAX, TOTAL, AVERAGE и COUNT) над текущим атрибутом, на который указывает курсор. Предварительно атрибуты группировки (соответствующие GROUP by языка SQL) должны быть раскрашены текущим цветом. После выполнения команды AGTFN курсор перемещается в шкалу цветов, и рядом с текущим цветом появляется информационное сообщение AGTFN:_, в котором необходимо указать имя нового атрибута. Значение нового атрибута в каждом образуемом кортеже равно значению вычисляемой агрегатной функции. После нажатия ПУСК атрибут ЗНАЧЕНИЕ ФУНКЦИИ присоединяется к схеме последнего из фиксированных отношений, при этом автоматически распахивается окно DNF. В окне DNF в очередной свободной строке появляется имя атрибута ЗНАЧЕНИЕ ФУНКЦИИ и знак равенства, после чего необходимо указать следующую информацию:

где — название одной из пяти указанных функций.

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

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

Операция импликации с квантором общности ALL

При выполнении команды ALL реализуются запросы, в которых отношения связываются

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

Первый режим применяется совместно с командой DNF. Логическое условие вида "a in {vl,v2,...vn}" или . "а < > v", где а — связываемый атрибут, a vi — некоторые его значения, задается при помощи раскраски атрибутов и команды DNF. При этом фиксированным является последнее отношение, для которого была выполнена команда FIX.

Выполненная после этого команда (CTRL + ) означает связывание квантором общности импликации от фиксированного отношения (или отношения, полученного в результате выполнения фрагмента запроса) к заданному логическому условию. Таким образом, команда CTRL+ «- соответствует следующей формуле исчисления отношений с переменными на доменах:

а(Р(а) - R(a,b,c)),

где Р(а) — указанное логическое условие, R — указанное отношение, а — связываемый квантором атрибут.

Выполнение команды CTRL+ -• означает связывание квантором общности противоположной импликации и соответствует следующей формуле исчисления отношений: а(Р(а) -* R(a,B,c)).

Этот режим возможен также и для результирующего отношения в окне TARGET.

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

Фиксируется отношение R1, в нем раскрашивается атрибут а, который должен связываться квантором общности. Затем фиксируется R2, в котором также раскрашивается атрибут, семантически связанный в схеме БД с атрибутом а. После этого выполняются команды импликации CTRL+ ♦- или CTRL+ -+. Команда CTRL-f +- соответствует в этом случае следующей формуле исчисления отношений с переменными на доменах:

a(Rl(a,b,...)-* R2(a)).

Команда CTRL + -* соответствует формуле:

a(R2(a)-* Rl(a,b,...)).

Описание окна результирующего отношения TARGET н условий DNF

Формат окна TARGET изображен на рис. 4. Окно содержит свое меню, шкалу цветов (такую же, как и в окне визуализации), изображение схемы формируемого результирующего отношения. В этом окне действуют части команд графического конструктора (COLOR, DNF, FORM, AGTFN и SET), которые позволяют выполнять соответствующие функции над результирующим отношением. Таким образом, в результирующем отношении можно выполнять поиск по условию, вычисление новых атрибутов и агрегатных функций. При этом также используется раскраска атрибутов, но в своей шкале цветов.

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

1)      посредством графической навигации в ок не визуализации схемы БД с использованием команды F4 и непосредственно в окне TARGET;

2)      путем явного указания атрибута и отно шения, откуда он должен быть взят: <имя отношения > . < атрибут > .

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

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

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

Перед выбором команды удаления атрибута (DEL) курсор помещается сначала на требуемый атрибут в схеме отношения, а после нажатия DEL удаляется из схемы.

-

Команда ESC осуществляет выход из окна, сохраняя его текущее состояние.

Окно DNF (рис.5) применяется для задания логических выражений, связывающих в запросе атрибуты и являющихся условиями поиска И задания арифметических выражений и агрегатных функций для вычисления новых атрибутов.

Для записи и редактирования выражений используется текстовой редактор.

Примеры конструирования запросов

Пример схемы БД в виде графической визуализации на экране приведен на рис. 6. Эта БД содержит отношения-объекты: "материалы" (МАТ), "детали" (DET), "изделия" (PRED) И отношения-связи между объектами: "материалы-детали" (MAT_DET), "изделия-детали" (PR_DET). Для этой схемы задача разузлова-ния изделий "Для данного изделия выдать список входящих в него деталей с указанием их количества" может быть сконструирована следующей последовательностью навигационных графических команд (записанных условно в текстовой форме): SET(KpacHbiu);FIX(PRED); СОЬ(Ж(Наименование_изделия); ОКР(Наименование_изделия = 'А'); FIX(PR_DET);LINK; FIX(DET);LINK;

8ЕТ(синий);СОЬОН(Наименоаание детали); TARGET; FIX(PR_DET);COLOR(^H4ecTBO);TARGET;

В окне TARGET будет визуально сформирована схема, содержащая два атрибута: Наиме нование_детали и Количество. Пример второго запроса к БД "Для данного материала выдать суммарный расход для каждого изделия с указанием наименования данного изделия" в виде последовательности графических команд имеет следующий вид: ЗЕТ(красный);

СОЕОР(Наименованиематериала); О^(Наименование_материала = 'В'); FIX(MAT_DET);LINK; FIX(PR DET);LINK;

ЗЕТ(синий);СОЬОР(Количество);Р1Х(МАТ_ОЕ Т);СОЬСЖ(Норма_расхода); FORM(SUM = норма_расхода*количество); FIX(PRED);LINK;

8ЕТ(зеленый);СОЬОР(Наименование_изделия); COLOR(Sum);TARGET; Распахнуть окно TARGET;

AGTFN(TOTAL Sum), (group Ьу:Наименова-ние_изделия).-

Перед выбором команды вставки атрибута (INS) курсор сначала помещается в то место схемы отношения, куда необходимо вставить атрибут, потом задается имя атрибута с указанием имени отношения, и только после нажатия ПУСК этот атрибут помещается в нужное место схемы.

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

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

Команда SORT указывает, что при формировании запроса требуется вставить операцию сортировки результирующего отношения.

Рассмотренный реляционный конструктор является удобным средством конвертирования запросов с целью перехода от одной СУБД к другой или сравнения эффективности различных СУБД.

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


Постоянный адрес статьи:
http://swsys.ru/index.php?page=article&id=1308&lang=
Версия для печати
Статья опубликована в выпуске журнала № 1 за 1991 год.

Возможно, Вас заинтересуют следующие статьи схожих тематик: