Научная статья на тему 'Синтаксис запросов конечных пользователей к реляционной базе данных'

Синтаксис запросов конечных пользователей к реляционной базе данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
408
83
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
Relational database / Запросы пользователей / Реляционные базы / query a end-user query

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Мокрозуб Владимир Григорьевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Мокрозуб Владимир Григорьевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Structured query language SQL is a generally accepted relational database query language. To program an application all existing and anticipative end-user requirements should be considered and met. Simple query syntax facilitating end user original query formulation is suggested and the way the query is interpreted by SQL is described.

Текст научной работы на тему «Синтаксис запросов конечных пользователей к реляционной базе данных»

№ 3(21) 2009 В. Г. Мокрозуб

Синтаксис запросов конечных пользователей к реляционной базе данных

Основой многих современных информационных систем, применяемых в различных прикладных областях, являются реляционные или постреляционные базы данных, задачей которых является хранение данных и их обработка по запросам пользователей. В статье представлен способ организации диалога и запросов конечных пользователей к реляционным базам данных на понятном им языке. Описана последовательность интерпретации строки запроса пользователя в синтаксисе SQL.

Основным языком программирования современных реляционных баз данных (РБД) является язык структурированных запросов — Structured Query Language, SQL. При этом программист должен, по возможности, учесть все пожелания конечных пользователей по обработке данных и получению отчетов этой обработки. При появлении новых запросов часто необходимо вносить добавления в существующие программы, так как пользователь не знает SQL, а программные продукты генерации отчетов (например, Crystal Reports) являются средствами программиста, а не конечного пользователя, так как требуют не только знания основ программирования, но и знания структуры базы данных.

Целью проведенного исследования являлась разработка простого синтаксиса запросов конечных пользователей и интерпретация этих запросов в синтаксис SQL. В найденных автором публикациях, посвященных этой теме, в большей степени описывается [1], что надо сделать для того, чтобы конечный пользователь мог формировать запросы к базе данных на понятном ему языке, и в меньшей степени [2], — как это сделать с минимальными затратами на программирование.

Переходя к дальнейшим рассуждениям, разделим РБД на два класса в зависимости от структуры:

• традиционные базы данных или базы данных с плоскими таблицами;

• базы данных типа ОБЪЕКТ—АТРИБУТ— ЗНАЧЕНИЕ.

Под традиционными РБД будем понимать базы данных, в которых сущности представлены широкими таблицами. Например, информационная сущность «Сдачи цехом продукции на склад» характеризуется атрибутами: Продукт, Количество, Цех_изготовитель, Дата_из-готовления, Дата_сдачи и др. Тогда в РБД будет существовать отношение (таблица), в которой с учетом нормализации представлены все перечисленные атрибуты (поля).

Базы данных типа ОБЪЕКТ—АТРИБУТ— ЗНАЧЕНИЕ представлены тремя основными таблицами: Реестр объектов, Реестр атрибутов; Значения атрибутов объектов. Последняя таблица имеет связи с первыми двумя по типу «многие к одному».

Организация диалога в традиционных базах данных

Представим нормализованную РБД БЭТ в следующем виде:

БЭТ = {К,,..., И,,..., И,}, , = У, И; = {РК,, РК !, й1},

РК , = {РК,.....РК,.....РК и}, ] = й,

Э, = {Э,,.....й,к.....Э,к }, к = 1, К,

где И, — ,-е отношение (таблица);

I — число отношений в базе данных;

РК, — ключевой атрибут ,-го отношения;

РК, — множество атрибутов для внешних

ключей ,-го отношения;

95

№3(21)2009

I

>а о

£

0 а

sr

1

Se >а

1

i «о о

S3 §

с ■о

if ы

х

§

«о

53

о &

J— число атрибутов внешних ключей; D/ — множество атрибутов данных /-го отношения;

K— число атрибутов данных (индекс / у J и K для упрощения записи не указан).

Обозначим W =Wu...,Wt ,...,WT, t = 1/T,

i

Wt € U D/ — множество атрибутов, по которым

могут осуществляться запросы или выводиться отчеты. Под элементарным условием p запроса будем понимать запись:

p=< a, f, z >,

где a — атрибут a € W;

z — множество значений атрибута; f — условие (равно—не равно, больше— меньше и т. д.), например,

< Город = 'Москва' > или < Дата= '01.01.2008' >.

Запрос пользователя S представим как совокупность элементарных запросов, соединенных логическими операторами И, ИЛИ, НЕ:

S = F(pi,...,pm,...,рм), m = 1,M,

где F — функция, связывающая элементарные условия запроса;

m — номер элементарного условия запроса; M — число элементарныхусловий запроса, например, S=р1 И(р2 ИЛИ р3)И(НЕр4).

Отчет запроса компонуется по элементам множества B, составленного из элементов множества W:

B = {B1, B2};

B1 = b1,...,ы,...,b]},Ы € W,с = IC;

B2 = {ф 1 (Ь2).....ф, (Ь2).....ф L (Ь2)},

b2 £ W, Ь2 £ B1, I = й,

где B1 — множество атрибутов данных, по которым составляется отчет запроса, без применения к ним агрегатных функций (Sum, Мах и др.);

b21, l = 1,L — множество атрибутов данных, по которым составляется отчет с применением агрегатных функций; Фl, l = 1,L — агрегатные функции, применяемые к элементам b21.

В1 = {Продукт, Город}, В2 = ^ит(Количество)}.

Итак, формирование запроса пользователя и получение результата разбивается на этапы ввода:

• элементарных условий

{р1,..., pm,..., Рм}, m=1, M;

• строки запроса

S = F(p1,...,pm,...,pm), m = 1,M;

• полей отчета

B1 = b1,...,bj},...,b\, b]c € W, с=1C;

• полей отчета

B2 = {ф 1 (b2).....ф I (bf).....ф L (b2)},

b2 € W, b2 £ B1, I = 1Д;

• выполнение запроса и получение отчета. Для преобразования строки запроса S

в формат SQL элементарные запросы, сформированные пользователем в виде < a, f,z >, представляются в виде < aiD, f,zID>, где aiD — наименование поля первичного ключа для a; ziD — множество значений поля первичного ключа для множества значений атрибута z. Например, элементарное условие:

< Город = 'Москва' >

в программной реализации необходимо заменить на

< ЮГород = ЮМосква >,

где ЮМосква — значение ключевого поля для значения «Москва».

В то же время элементарное условие < Дата > 01.01.2008 > остается без изменения. В первом случае условие для ID, во втором случае —условие для значения. Преобразованную таким образом строку запроса S назовем SI.

Для организации диалога с пользователем при вводе элементарных условий необходимо обеспечить выбор атрибута a и ввод (выбор) множества значений атрибута z. Для выбора a создадим таблицу атрибутов запросов G = {GID, A, AID}.

Значениями (доменом) поля Aявляется множество W={W,..., Wt,..., WT}. Домен поля AID —

96

№3(21)2009

наименования ключевых полей для W={W1,...,Wt,..., WT}, если элементарное условие для ID или наименование поля, если элементарное условие для значения.

Элементарные условия сохраняются в таблице Y{Имя_условия, A, AID, f,Z, ZID}.

Создадим V{PK1,..., PK,, ..., PKn ,W,..., Wt,..., WT} — представление (View), по которому составляется отчет. Тогда запрос на SQL можно записать как:

select B from V where SI group by B1 order by B1.

Рассмотрим разработку программы диалога на примере отгрузки готовой продукции потребителям. Каждая единица готовой продукции изготавливается определенным цехом. База данных представляется как:

BDT = {R1, R2, R3, R 4, R5},

где R1 (IDR1, ЮПокупатель, ЮПродукт, Количество, Дата_отгрузки) — отгрузка продукции; R2 (ЮПродукт, ЮЦех, Наименование_про-дукта) — продукты;

R3 (ЮПокупатель, ЮГород, Наименование_ покупателя) — покупатели; R4(IDГород, Наименование_города) — города;

R5 (IDЦех, Наименование_цеха) — цеха.

Таким образом, отгрузка характеризуется шестью атрибутами: Покупатель, Продукт Количество, Дата отгрузки, Цех-производитель, Город.

Конечный пользователь может сформулировать запрос на получение отчета по любой комбинации атрибутов, например, отчет по отгрузке продуктов, выпущенных цехами 1,3,10, в Москву, Липецк, Тамбов в январе 2008 и 2009 годов. Форма отчетов по этому запросу может быть разнообразной, например, Продукт-Количество, Город-Продукт-Количество, Продукт-Город-Количество.

Множество W = = {Наименование_покупателя, Наименование_продукта, Наименовнаие_города, Наименование_цеха, Дата_отгрузки, Количество}.

Для рассматриваемого примера таблица атрибутов запросов 6 выглядит следующим образом (табл. 1).

Таблица 1

Таблица атрибутов запросовG

IDG Наименование покупателя AID

1 IDПокупатель

2 Наименование_продукта ЮПродукт

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3 Наименование_цеха ЮЦех

4 Наименование_города ЮГород

5 Дата_отгрузки Дата_отгрузки

б Количество Количество

3

IT

3=

Представление, по которому составляется отчет, V{PK1,...,PK,,...,PKn, W1,..., Wt,..., WT} = = IDR1, ЮПокупатель, Наименование_покупате-ля, ЮПродукт, Наименование_продукта, ЮГород, Наименование_города, Ю_цех, Наименова-ние_цеха, Дата_отгрузки, Количество} получается в результате запроса:

select IDR1, ЮПокупатель,

Наименование_покупателя, ЮПродукт, Наименование_продукта, IDГород,

Наименование_города, ID_цех, Наименование_цеха, Дата_отгрузки, Количество from R1,R2,R3,R4,R5,

where R1 .ЮПокупатель= R3 .IDПокупатель and R1 .ЮПродукт= R2 .IDПродукт and R2 .ЮЦех= R5 .IDЦех and R3 .IDГород=R 4 .IDГород.

Строка запроса пользователя представляет собой логическое выражение из элементарных условий. Например, запрос «Отгрузка продуктов, выпущенных цехами 1,3,10, (ЮЦех — 2, 5, 8 соответственно) в города Москва, Липецк, Тамбов (ЮГород — 10,11,12 соответственно) в январе 2008 года и январе 2009 года» будет выглядеть так:

S = F(Р, ,Р2,Рз , Р4, Р5,Рб) = = p И Р2 И (Р3 И Р4 ИЛИ Р5 И Рб),

где Р! — цех = (цех1, цех 3, цех 10);

97

№3(21)2009

Таблица 2

Таблица (отношение) Y

Имя условия A AID f Z ZID

1 2 3 4 5 6

p1 Наименование_цеха ЮЦех = цеха: 1, 3,10 2,5,8

p2 Наименование_города ЮГород = Москва, Липецк, Тамбов 10,11,12

p3 Дата_отгрузки Дата_отгрузки > 01.01.2008 01.01.2008

p 4 Дата_отгрузки Дата_отгрузки < 31.01.2008 31.01.2008

p5 Дата_отгрузки Дата_отгрузки > 01.01.2009 01.01.2009

p6 Дата_отгрузки Дата_отгрузки < 31.01.2009 31.01.2009

p2 — Город = (Москва, Липецк, Тамбов), p3 — Дата_отгрузки > 01.01.2008; p4 — Дата_отгрузки < 31.01.2008 p5 — Дата_отгрузки > 01.01.2009; p6 — Дата_отгрузки < 31.01.2009.

Ввод каждого элементарного условия < a, f,z > состоит из следующих действий:

• выбор атрибута a из таблицы атрибутов запросов G;

• назначение условия f;

^ • ввод значения или множества значений z.

| При этом создается табл. 2, столбцы 1,2,4,5

<§ которой представляются пользователю.

S Далее пользователь вводит строку условий

>§ запроса S = p1 И p2 И (p3 И p4 ИЛИ p5 И p6).

£ Предполагается, что элементарные логиче-

ir ские выражения он составлять умеет. Практика

g показала, что достаточно получасового обуче-

* ния пользователей любого уровня знаний.

й Поля отчета (поля представления V) также вы-

g бираются пользователем из таблицы атрибутов

§ запросов G. В результате создаются множества: 2

| B = {Наименование_продукта,

g Наименование_цеха, Бит(Количество)}, if

g B1 = {Наименование_продукта,

* Наименование_цеха}, 53

g, В2 = {Бит(Количество)}. §

2 Строка условий запроса Sна основании таб-

5е лицы Y (табл. 2) преобразуется в следующее:

5 SI = p/1 and p/2 and (p/3 and p/4 or p/5 and pi6),

где pi1 — Юцех in zi1, zi1 = (2,5, 8);

pi2 — ЮГород in zi2, zi2 = (10,11,12); pi3 —Дата_отгрузки > zi3, zi3 = 01.01.2008; pi4 — Дата_отгрузки < zi4, zi4 = 31.01.2008; pi5 — Дата_отгрузки > zi5, zi5 = 01.01.2009; pi6 — Дата_отгрузки < zi6, zi6 = 31.01.2009.

В результате формируем запрос: select B from V where SI group by B1 order by B1

Организация диалога в базах данных типа ОБЪЕКТ—АТРИБУТ—ЗНАЧЕНИЕ АТРИБУТА

Примерами баз данных с подобной структурой являются: база технического оборудования предприятия, справочник свойств веществ и др. Запрос к базе данных заключается в поиске объектов, атрибуты которых удовлетворяют заданным условиям. Например, в базе оборудования предприятия найти все емкостные аппараты, у которых имеется якорная мешалка и объем которых больше 10 м3. База данных BDO в этом случае может быть представлена как:

BDO={O, S, SO, SZ},

где O(IDO, Наименование_объекта) — объекты; SW(IDSW, Наименование_атрибута) — атрибуты;

SO(IDSO, IDO, IDSW, Значение_атрибута, IDSZ) — значения атрибутов конкретных объектов; SZ(IDSZ,IDSW, Возможное_значение) — список значений атрибутов.

98

№3(21)2009

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

Таблица атрибутов запросов здесь присутствует в явном виде, SW, и ее не надо создавать, как это было ранее. Также не надо создавать представление V, так как его роль отведена таблицам О и SO.

Последовательность составления запроса пользователем и его обработку рассмотрим на следующем примере. В базе оборудования завода найти аппараты объемом менее 10 м3 с турбинной мешалкой.

SI=pi1 and pi2,

где р/п — exists (select * from SO where O. IDO=SO. IDO and SO. IDS = 5 and SO. IDSZ = 15); p/2 — exists (select * from SO where O. IDO=SO. IDO and SO. IDS = 7 and SO. Значение_атри-бута <10).

Представить программно элементарные условия р/ не составляет особого труда, так как они содержат постоянную часть

«exists (select * from SO where O. IDO=SO.IDO and»

и переменную, которая легко выводится из табл. 3.

IT

3=

Таблица 3

Таблица (отношение) Y

Имя A AID f Z ZID

условия ($.Наименование_атрибута) (S. IDS) ^.Возможное_значение (SZ.IDS

или константа) или Null)

1 2 3 4 5 6

Pi Тип мешалки 5 = Турбинная 15

P2 Объем аппарата м3 7 < 10 NULL

Запрос пользователя S будет состоять из двух элементарных условий, соединенных логическим И: «объем аппарата меньше 10 м3» И «тип мешалки — турбинная».

Ввод каждого элементарного условия < а, f,г > состоит из следующих действий:

• выбор атрибута а из таблицы атрибутов SW;

• назначение условияf;

• ввод значения г или выбор его из таблиц Б7.

При этом создается отношение /(табл.3), столбцы 1, 2, 4, 5 которой предоставляются пользователю для составления запроса.

Далее пользователь составляет запрос: S=Р1 И Р2,

где р1 —Тип мешалки=турбинная; р2 — Объем аппарата < 10.

Строка условий запроса на основании таблицы / (табл. 3) преобразуется в строку:

Таким образом, запрос на поиск объектов, удовлетворяющих SI, можно записать в виде:

select * from O where SI.

Эффективность методики показала трехлетняя эксплуатация корпоративной информационной системы ОАО «Пигмент», построенной с использованием предлагаемого подхода.

СПИСОК ЛИТЕРАТУРЫ

1. Биряльцев Е. В., ГусенковА.М. Онтологии реляционных баз данных. лингвистический аспект / Компьютерная лингвистика и интеллектуальные технологии: Труды международной конференции «Диалог 2007» (Бекасово, 30 мая — 3 июня 2007 г.). М.: Изд-во РГГУ, 2007.

2. Курбатов С. С. Автоматизированное построение естественно-языкового интерфейса для реляционных баз данных / Новости искусственного интеллекта / Анахарсис. 2002. № 2 .

99

i Надоели баннеры? Вы всегда можете отключить рекламу.