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

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

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

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

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

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

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

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

Накапливаемые данные могут использоваться для модернизации ПРС (частичная замена или изменение состава компонентов), а также для формирования математических моделей, которые с определенной вероятностью позволяют прогнозировать «поведение ПРС» и формировать рекомен-

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

В качестве показателя эффективности применения ПРС можно использовать среднее (или суммарное) значение величины эксплуатационных расходов M(S) при выполнении ограничений на значения показателей надежности; например, значение наработки на отказ T0 должно быть не менее допустимой величины: M(S)^min; T0>T0, доп.

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

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

Литература

1. Дмитров В.И., Норенков И.П., Павлов В.В. К проекту Федеральной программы «Развитие CALS-технологий в России» // Информационные технологии. 1998. № 4. С. 2-11.

2. Арбузов В.А., Пикулин В.В. Разработка САПР охранной сигнализации с использованием технологии геоинформационных систем // Современные методы и средства обработки пространственно-временных сигналов: сб. матер. III Всерос. науч.-технич. конф. Пенза: ПГТА, 2005. С. 93-95.

3. Системный анализ в управлении / В.С. Анфилатов, А.А. Емельянов, А.А. Кукушкин. М.: Финансы и статистика, 2006.

4. Веселовский А.М., Пикулин В.В. Анализ обобщенной процедуры решения задачи о назначении при наличии конструктивных ограничений. Вестн. Воронеж. ГТУ. 2011. Т. 7. № 3. С. 126-131.

УДК 004.4

ПРЕДСТАВЛЕНИЕ ГРАФОВ И НЕОРИЕНТИРОВАННЫХ ГИПЕРГРАФОВ С ОГРАНИЧЕНИЯМИ В РЕЛЯЦИОННОЙ БАЗЕ ДАННЫХ

(Работа выполнена в рамках Федеральной целевой программы «Научные и научно-педагогические кадры инновационной России» на 2009-2013 гг., ГК№ 02.740.11.0624)

В.Г. Мокрозуб, к.т.н.; В.А. Немтинов, д.т.н.; Д.А. Лагутин

(Тамбовский государственный технический университет, mokrozubv@yandex.ru, nemtinov@mail.gaps.tstu.ru, teotrall@mail.ru)

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

Ключевые слова: граф, гиперграф, ограничения, реляционная БД, ссылочная и доменная целостность, операции добавления и удаления.

Графы широко используются для представления структуры различных систем. В работах [1, 2]

описаны матричное и аналитическое представление простых, мульти- и гиперграфов и операции

над ними (добавление, удаление вершин и ребер, стягивание и др.), а в [3] приведен подробный анализ использования различных графов для моделирования структуры технических объектов.

Результаты, описанные в указанных работах, не зависят от ПО, которое может использоваться для практического применения в автоматизированных информационных системах (АИС).

Программная среда реализации АИС, в свою очередь, определяет предпочтения на формальное представление графов. Так, в [4] рассматривается применение ^-ориентированных гиперграфов и реляционных БД для структурного и параметрического синтеза технических систем. Применение сложных ^-ориентированных гиперграфов не всегда целесообразно - для ряда задач достаточно использовать простые графы и гиперграфы.

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

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

Формальное описание простых графов с ограничениями

Обозначим простой граф G0(X, Ц), где X={xi}, 1 = 1,1 - множество вершин графа, xi - 1-я вершина графа; Ц={ит(х1, х^}, т = 1,М, 1 = 1,1, ] = 1,1 - множество ребер графа, ит(х1, х^ - т-е ребро графа, соединяющее вершины х1 и х^

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

О1: -.3 ит(хк, хк)еЦ, т = 1,М, к = 1,1.

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

О2: V ит(х1, х^еЦ, т = 1,М, 1 е1,1, \е 1,1 ^

-3 и,(х1, х^еЦ, 1^т, 1 е 1,М .

Граф называется ориентированным, если ребро имеет направление, например, от х1 (вершина-источник) к Xj (вершина-приемник). Если вершина-приемник связана только одним ребром и только с одной вершиной-источником, то такой граф называется направленным деревом.

Введем ограничение О3, означающее, что вершина-приемник связана только с одной вершиной-источником (ограничения на число связей нет):

О3: V ит(х1, Xj)еU, т е 1,М, 1 е 1,1, \ е 1,1 ^

—3 ип(хк, Xj)еU, п^т, 1^к, п е 1,М, к е 1,1.

С учетом введенных ограничений граф будет направленным деревом, если одновременно выполняются условия О1, О2, О3.

На рисунке 1 представлены примеры простых ориентированных графов.

Добавим к классическому обозначению графа G(X, Ц) перечисленные выше ограничения. С учетом ограничений графы на рисунке 1 формально можно представить следующим образом:

1а: G(X, Ц, О1лО2лО3);

1б: G(X, Ц, О1лО3);

1в: G(X, Ц, О1лО2);

1г: G(X, Ц, О1);

1д: G(X, Ц, О1ЛО2).

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

Реляционная БД (РБД) ББо, описывающая графы на рисунке 1, представляет собой кортеж ВБо=<Х, Ц, G>, где X, Ц, G - следующие отношения: X - вершины графа, Ц - ребра графа, G -граф (связи вершин и ребер).

В свою очередь, отношения X, Ц, G можно представить как

Х={РК_ГО_Х, ГО_Х, Наименование_верши-ны}, где РК_ГО_Х - первичный ключ, ГО_Х - поле первичного ключа;

Рис. 1. Примеры простых ориентированных графов

U={PK_ID_U, ID_U, Наименование_связи},

где PK_ID_U - первичный ключ; ID_U - поле первичного ключа;

G={PK_ID_G, FK_ID_U, FK_ID_XI, FK_ID_XJ, ID_G, ID_U, ID_XI, ID_XJ}, где PK_ID_G - первичный ключ; FK_ID_U, FK_ID_XI, FK_ID_XJ - внешние ключи (по полям ID_U, ID_XI, ID_XJ); ID_G - поле первичного ключа; ID_XI, ID_XJ - поля первичного ключа вершины-источника и вершины-приемника.

Так как ребро в графе всегда уникально, нет необходимости вводить отношение U, достаточно в отношение G добавить поле «Наименование_ связи». Тогда БД, описывающая графы (рис. 1), описывается двумя отношениями: BDo=<X, G>, где X={PK_ID_X, ID_X, Наименование_верши-ны}, G={PK_ID_G, FK_ID_XI, FK_ID_XJ, ID_G,ID_XI, ID_XJ, Наименование_связи}. Схема данных этой базы представлена на рисунке 2.

Описанная БД не включает ограничения Oj, O2, O3. Внешние ключи FK_ID_XI, FK_ID_XJ гарантируют ссылочную целостность базы, то есть в таблице G не будет значений ID_XI и ID_XJ, не входящих в домен ID_X таблицы X. Ограничения Oi, O2, O3 относятся к доменной целостности БД. Рассмотрим представление этих ограничений в БД BDo.

Проверка доменной целостности в РБД может осуществляться при выполнении операций удаления, редактирования и добавления записей.

Ограничение O1 - граф не должен иметь петель. Это означает, что в отношении G не может быть записи, у которой G.ID_XJ=G.ID_XI. Это ограничение может быть добавлено к BD следующим выражением: alter table G add constraint CK_O1 check (ID_XI<>ID_XJ). (1)

(Здесь и далее для представления программного кода используется Transact-SQL.)

Ограничение O2 - граф не является мультигра-фом. Это ограничение может быть добавлено двумя способами:

а) добавлением к отношению G уникального индекса по полям ID_XI и ID_XJ: create unique index IX_O2 on G (ID_XI, ID_XJ); (2)

б) проверкой истинности условия: (not exists (select * from G

where G.ID_XI=@ID_XI and G.ID_XJ = @ID_XJ )), (3)

где @ID_XI, @ID_XJ - значения G.ID_XI и G.ID_XJ добавляемой записи (или новые значения редактируемой записи).

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

Обозначим @ID_XI, @ID_XJ значения G.ID_XI и G.ID_XJ добавляемой записи (или новые значения редактируемой записи). Тогда ограничение O3 не будет нарушено, если истинно выражение

(not exists (select * from G

where G.ID_XJ=@ID_XJ)) or (exists (select * from G where G.ID_XI=@ID_XI and G.ID_XJ= @ID_XJ)). (4)

Выражения (1) и (2) создают отдельные объекты РБД, а именно, CK_O1, IX_O2. Выражения (3) и (4) могут проверять тригеры. Пометим тригеры, проверяющие выражения (3) и (4), как TR_O2 и TR_O3.

Обозначим G1={PK_ID_G, FK_ID_U, FK_ID_XI, FK_ID_XJ, ID_G, ID_U, ID_XI, ID_XJ}. Тогда с учетом ограничений таблица G для графов, представленных на рисунке 1 , будет выглядеть следующим образом: 1a: G={G1, CK_O1, IX_O2 или TR_O2, TR_O3); 1б: G={G1, CK_O1, TR_O3}; 1в: G={G1, CK_O1, IX_O2 или TR_O2}; 1г: G={G1, CK_O1}; 1д: G={G1, CK_O1, IX_O2 или TR_O2}.

Формальное описание неориентированных гиперграфов с ограничениями

Обозначим гиперграф Gg(X, U), где X={xi}, i = 1,I - множество вершин гиперграфа, xi - i-я вершина; U={um(Ym)}, m = 1,M - множество ребер гиперграфа, um(Ym) - m-е ребро гиперграфа, Ym - множество вершин, инцидентных m-му ребру, YmCX, Ym={xk}, keKm, Km с 1,I. При этом два множества вершин равны Ym=Yn, если у них одинаковое число элементов, то есть равны их мощности | Ym | = | Yn |, и для любого элемента xke Ym, k е 1,I, во множестве Yn существует точно такой же элемент. Например, множества {x1, x5, x3} и {x3, xj, xs} равны.

Примеры неориентированных гиперграфов представлены на рисунке 3.

Два ребра, имеющих одинаковые вершины, называются смежными. Гиперграф не будет иметь смежных ребер (рис. 3 а), если выполняется ограничение 04: V ит(Ут)еи; т е 1,М ^

-3 и„(У„)еи; п е 1,М; п^т; УтпУ„*0.

На рисунке 3б представлен гиперграф, который используется в задачах размещения оборудования в производственных помещениях, когда определенная группа аппаратов (вершины) обладает одним и тем же свойством (первое ребро), например пожароопасность, и, следовательно, должна размещаться в соответствующем помещении (второе ребро). Описанная ситуация может быть учтена следующим ограничением. Определенный набор вершин УсХ инцидентен конкретному набору ребер и'си, причем нет вершин, принадлежащих У, инцидентных ребрам другого набора вершин.

05: Зи'={ир(Ур)}си; УрСХ; р е Р с 1М ^

-3 ип(Уп)^и'; п е 1М; п*р; УпСХ; УпПУр*0.

Ребра, имеющие равные множества вершин, называются кратными. Гиперграф не будет иметь кратных ребер (рис. 3в), если выполняется ограничение 06: V ит(Ут)еи; т е 1,М ^

-3 ип(Уп)^и; т*п; п е 1,М; Ут=Уп.

С учетом ограничений гиперграфы (рис. 3) можно записать в виде: За: Ов(Х, и, 04); 3б: Ов(Х, и, 05); 3в: С8(Х, и, Об).

Структура РБД для описания неориентированных гиперграфов с ограничениями

БД BDg, описывающая графы на рисунке 3, представляет собой следующий кортеж (схема данных показана на рисунке 4): ВDg=<X, и, О>, где Х, и, О - следующие отношения: Х - верши-

ны графа, U - ребра графа, G -граф (связи вершин и ребер).

В свою очередь, отношения X, U, G можно представить как X={PK_ID_X, ID_X, На-именование_вершины}, где PK_ID_X - первичный ключ, ID_X - поле первичного ключа; U={PK_ID_U, ID_U, На-именование_ребра}, где

PK_ID_U - первичный ключ, ID_U - поле первичного ключа; G={PK_ID_G, FK_G_U, FK_G_X, ID_G, ID_U, ID_X}, где PK_ID_G - первичный ключ, FK_G_U, FK_G_X -внешние ключи (по полям ID_U, ID_X), ID_G - поле первичного ключа, ID_U, ID_X - поля первичного ключа ребра и вершины.

Внешние ключи FK_G_U, FK_G_X обеспечивают только ссылочную целостность данных и не обеспечивают выполнение ограничений O4, O5, Об. Рассмотрим способы представления ограничений О4, О5, Об в РБД.

Ограничение О4 - гиперграф не должен иметь смежных ребер (рис. 3а). Это значит, что в отношении G может существовать только одна запись (кортеж) с заданной вершиной. Обозначим @ID_X значения G.ID_X добавляемой в G записи (или новое значение редактируемой записи). Ограничение О4 не будет нарушено, если истинно выражение

(not exists (select * from G where G.ID_X=@ID_X )). (5)

Вторым способом обеспечения выполнения ограничения О4 является создание уникального индекса в таблице G по полю ID_X:

create unique index К_О4 on G (ID_X). Ограничение О5 - определенный набор вершин YcX инцидентен определенному набору ребер U'cU, причем нет вершин, принадлежащих Y, инцидентных ребрам другого набора (рис. 3б). Рас-

FK G X

ID X

Наименование вершины

U

ID U

Наименование ребра

G

ID. G

ID. X

ID U

FK G U

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

Рис. 4. Схема БД, описывающей неориентированные гиперграфы

X

смотрим ситуации, при которых возможно нарушение ограничения О5.

Добавить (удалить) вершину в ребро. Обозначим @ID_U ребро, в которое добавляется вершина. Здесь возможны два случая:

а) если набор вершин корректируемого ребра инцидентен только одному ребру (ребро U5, рис. 3б), то вершина без проблем добавляется (удаляется) в ребро (ребро U5, рис. 3б). Набор вершин инцидентен только одному ребру @ID_U, если истинно условие

(not exists (select ID_U from G as b, (select ID_X from G

where ID_U=@ID_U) as a

where b.ID_X=a.ID_X

and b.ID_U<>@ID_U); (6)

б) если набор вершин ребра инцидентен нескольким ребрам, то ограничение О5 не будет нарушено, если добавить (удалить) вершину ко всем этим ребрам. Для гиперграфа на рисунке 3б при добавлении новой вершины в ребро Ui необходимо добавить эту вершину также и в ребро U4. Предположим, надо добавить вершину @ID_X в ребро @ID_U, тогда команда добавления будет следующей:

insert into G (ID_X, ID_U)

(select distinct @ID_X, G.ID_U from G inner join G as G1 on G1.ID_U=@ID_U

where G.ID_X=G1.ID_X). (7)

Добавить новое ребро. Обозначим Xi={ID_Xi, ID_X) таблицу вершин добавляемого ребра, @M1 - число вершин (число записей в X1). Добавить новое ребро можно

а) если все вершины Xi инцидентны хотя бы одному ребру (например, добавление ребра U3, когда существует ребро U2, рис. 3б). Все вершины X1 инцидентны хотя бы одному ребру, если истинно выражение @M1=@M2, где @M2 - число вершин существующего ребра, которые равны вершинам X1. Определение @M2 осуществляется выражением

select @M2=count(*) from G, X1, (select top 1 ID_U from G, X1 where G.ID_X=Xi.ID_X) as a where G.ID_U=a.ID_U

and G.ID_X=X1.ID_X; (8)

б) если в G нет ни одной вершины из X1, то есть истинно выражение

(not exists (select G.ID_X from G,X1 where X1.ID_X=G.ID_X)). (9)

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

Добавить новое ребро. Обозначим вершины добавляемого ребра как отношение X1={ID_X}, @M1 - число вершин (число записей в X1). Добавить новое ребро можно

а) если хотя бы одна вершина из X1 не входит ни в одно ребро (не присутствует в G), то есть истинно выражение

(exists (select X1.ID_X from X1

where X1.ID_X not in (select X1.ID_X from G,X1

where G.ID_X=X1.ID_X))); (10)

б) если не существует ребра c вершинами X1, то есть истинно выражение

(not exists (select count(*) from X1,G

where G.ID_X=X1.ID_X (11)

group by G.ID_U having (count(*))=@M1)). Добавить вершину в ребро или удалить вершину из ребра. @ID_X обозначим ID_X добавляемой (удаляемой) вершины, @ID_U - ID_U корректируемого ребра.

Добавить вершину в ребро можно, если вершина не существует в G, то есть истинно выражение

(not exists (select * from G

where G.ID_X=@ID_X)). (12)

Добавить (удалить) вершину из ребра можно также, если нет ни одного ребра, все вершины которого равны вершинам получаемого ребра. Обозначим через X1 вершины получаемого ребра, тогда добавить (удалить) вершину из ребра можно, если выражение (11) истинно.

Обозначим TR_O4 триггер, осуществляющий проверку выражения (5) (ограничение 4), TR_O5 -триггер, осуществляющий проверку выполнимости ограничения O5 (выражения (6)-(9)), TR_O6 -триггер, осуществляющий проверку выполнимости ограничения O6 (выражения (10)-(12)).

Обозначим G1={PK_ID_G, FK_G_U, FK_G_X, ID_G, ID_U, ID_X}, тогда с учетом ограничений отношение G для графов (рис. 3) будет выглядеть следующим образом: 3а: G={G1, TR_O4 или IX_O4}; 3б: G={G1, TR_O5}; 3в: G={G1, TR_O6}.

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

Литература

1. Овчинников В.А. Математические модели объектов задач структурного синтеза // Наука и образование: электрон. на-уч.-технич. изд. 2009. № 3. URL: http://technomag.edu.ru/doc/

115712.html (дата обращения: 15.11.2010).

2. Овчинников В.А. Операции над ультра- и гиперграфами для реализации процедур анализа и синтеза структур сложных систем // Там же. № 10. URL: http://technomag.edu.ru/doc/ 132769.html (дата обращения: 15.11.2010).

3. Иванова Г.С. Способы представления структурных моделей // Там же. 2007. N° 1. URL: http://technomag.edu.ru/doc/ 62742.html (дата обращения: 15.11.2010).

4. Мокрозуб В.Г. [и др.]. Применение Сориентированных гиперграфов и реляционных баз данных для структурного и параметрического синтеза технических систем // Прикладная информатика. 2010. № 4 (28). С. 115-122.

5. Мокрозуб В.Г., Мариковская М.П., Красильников В.Е. Интеллектуальная автоматизированная система проектирования химического оборудования // Системы управления и информационные технологии. 2007. № 4.2(30). С. 264-267.

УДК 004.65:052.4

ОБРАБОТКА ОШИБОК РЕЛЯЦИОННЫХ БАЗ ДАННЫХ.

В.Н. Лихачёв, к.п.н. (Калужский университет им.. К.Э. Циолковского, lvlad@rambler.ru)

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

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

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

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

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

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

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

Разработка такого подхода связана с рядом сложностей:

- использование в клиентских программах обозначений таблиц и полей (пользовательских названий), отличных от их имен в БД;

- отсутствие у пользователей достаточных знаний о структуре БД и особенностях хранения в ней данных;

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

- формирование сообщений об ошибках сервером БД без учета ее логической структуры;

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

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

Универсальные сообщения об ошибках БД

Сообщения об ошибке от сервера БД обычно содержат тип ошибки (в виде ее кода) и название объекта БД, явившегося причиной ее возникновения.

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