Научная статья на тему 'Объектно-ориентированный подход к представлению баз данных в не первой нормальной форме'

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

CC BY
196
33
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БАЗЫ ДАННЫХ НЕ ПЕРВОЙ НОРМАЛЬНОЙ ФОРМЫ / ОБЪЕКТНО-РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ / АБСТРАКТНЫЙ ТИП ДАННЫХ

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

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

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

Текст научной работы на тему «Объектно-ориентированный подход к представлению баз данных в не первой нормальной форме»

Емельченков Е.П.1, Макаров А.И.2, Мунерман В.И.3

1 Смоленский государственный университет, г.Смоленск, к.ф-м.н., заведующий кафедры

информатики, ypy1101@gmail.com

2 Смоленский государственный университет, г.Смоленск, студент физико-математического

факультета, al.makarov8 @ gmail. com

3 Смоленский государственный университет, г.Смоленск, к.т.н., доцент кафедры информатики

vimoon @ gmail .com

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К ПРЕДСТАВЛЕНИЮ БАЗ ДАННЫХ В НЕ ПЕРВОЙ НОРМАЛЬНОЙ ФОРМЕ

КЛЮЧЕВЫЕ СЛОВА

Базы данных не первой нормальной формы, объектно-реляционные базы данных, абстрактный тип данных.

АННОТАЦИЯ

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

Экспериментальная часть работы выполнена при помощи средств Windows Azure в рамках гранта, предоставленного Смоленскому Государственному Университету корпорацией Microsoft.

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

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

К. Дейт предостерегает [2] «Прежде чем перейти к подробному освещению данной темы [объектные базы данных], необходимо предупредить читателя, что впредь не следует ожидать скрупулезной точности изложения, присущей реляционной теории. Действительно, многие объектные концепции (или их опубликованные определения) выражены не очень точно, относительно формулировки их определений единства мнений не достигнуто, и разногласия возникают даже по фундаментальным вопросам».

Под ОРСУБД следует понимать системы, которые следуют духу Манифеста систем баз данных третьего поколения и букве стандартов SQL:1999 и SQL:2003 [3].

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

строгого определения АТД.

Абстрактный тип данных - это многоосновная универсальная алгебраическая система [6].

Под многоосновной алгебраической системой понимается система им=<М; й, П ;>, состоящая из семейства основных множеств М={ Аа } ( а = 1,2,... ) и сигнатуры й операций, определенных на семействе М так, что каждая п-арная операция из й является отображением декартова произведения п множеств из семейства М в множество из того же семейства

Лах...х Ла ^ Ла п п: Лах ...х Ла ^ {0,1}

1 п г, - сигнатура п-местных предикатов 1 п .

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

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

АТД Классы

Объекты

Рис.1. Дерево наследования в объектно-реляционной модели данных

Далее показано, что множество отношений можно рассматривать, как атомарный домен, и показано, что это укладывается в определение ОРСУБД. Пусть R - множество всех возможных отношений. В реляционной алгебре над отношениями из множества R определены унарные и бинарные алгебраические операции. Отношение в не первой нормальной форме определяется как отношение со схемой R0(А1 +!) , где R0 - отношение в не первой нормальной

форме, а Rk+1 - атрибуты, домены которых содержат отношения с одинаковыми схемами,

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

Современные языки манипулирования данными (ЯМД), такие как Transact-SQL можно рассматривать как языки, поддерживающие технологию объектно-ориентированного

проектирования и программирования. Действительно, поскольку конкретная база данных есть АТД, то её можно рассматривать, как совокупность переменных (свойств), в роли которых выступают отношения (таблицы), и операции над ними (методы), представленные в виде запросов и хранимых процедур, а также функций, триггеров и прочих процедурных элементов базы данных. Далее, следуя терминологии ЯМД, вместо термина «отношение» будет использоваться термин «таблица».

При таком подходе таблицы конкретной базы данных можно разделить на две группы: первая группа содержит таблицы в не первой нормальной форме, а вторая - таблицы, которые могут входить в множества значений атрибутов Rk,...,Rn таблиц первой группы. В конкретных случаях вторая группа таблиц разделена на подгруппы, каждая из которых и есть домен атрибута R, входящего в состав схемы одной из таблиц R0. Над таблицами, входящими в домены атрибутов Rk+i ,--,Rn определены операции реляционной алгебры. Кроме того, над ними могут быть определены предикаты. Например, если таблица Rj принадлежит домену атрибута Ri (j - фиксирует таблицу в домене), то можно определить предикат «число строк в таблице Rj больше L». Такой предикат позволит выбирать таблицы в зависимости от количества строк.

Над таблицами в не первой нормальной форме могут выполняться любые операции реляционной алгебры, а именно: унарные операции SELECT и PROJECT, а также бинарные теоретико-множественные операции и операция JOIN.

Далее рассматриваются примеры реализация операций над отношениями в не первой нормальной форме средствами ЯМД Transact-SQL на основе объектно-ориентированного подхода. Возможность применения этого подхода к рассматриваемому типу баз данных обусловливается наличием типа данных «таблица». Переменные этого типа данных задаются следующим образом: DECLARE @<Имя переменной-таблицы> Table (<Список полей с указание типов>).

Пример 1. Обработка таблиц в не первой нормальной форме оператором SELECT. Пусть дана таблица R0(A <простой тип данных>, R nchar(255)). В базе данных хранится множество таблиц R1 = {R11, R12, ..., R1N}. Все таблицы R1i имеют одну и ту же схему и находятся в первой или более высокой нормальной форме. Значениями атрибута R таблицы R0 будут имена таблиц, которые играют роль ссылок на таблицы из множества R1. В этом случае можно считать, что таблица R0 находится в не первой нормальной форме. Можно также считать, что множество таблиц R1 будет доменом атрибута R таблицы R0, поскольку этот атрибут содержит ссылки на таблицы, которые будут обрабатываться в запросе. В рассматриваемом примере все таблицы хранятся в одной базе данных, но это упрощение не является существенным, так как вместо простого имени таблицы можно использовать URL. Далее рассматриваются запросы к таблице R0 реализованные в виде специальных операций с помощью хранимых процедур. Запрос выполняет выборку таблиц, число строк в которых превышает заданную величину L. В запросе участвует таблица R0, описание схемы которой дано в начале примера, таблицы из множества R1 имеют одинаковую схему, состоящую из двух атрибутов простых типов. Если бы такой запрос можно было написать средствами обычного языка SQL то он бы имел следующий вид:

SELECT <список полей> FROM R0 WHERE <число строк в таблице R1i>L >.

Поскольку в команде WHERE возможны только алгебраические выражения в которых участвуют переменные простых типов данных реализация такого запроса возможна по средствам специального метода, организованного как хранимая процедура (листинг 1). Процедура принимает целочисленный параметр @L, нижняя граница числа строк для таблиц R1i. Результат этого запроса помещается в таблицу RORes схема которой совпадает со схемой таблицы R0.

Листинг 1. Хранимая процедура для реализации запроса SELECT с предикатом, определенным на

множестве таблиц

1. CREATE PROCEDURE [Select_NF_Where]

2. @L int

3. DECLARE @R1i TABLE (B1 int, B2 int)

4. DECLARE @A int, @R nchar(255), @row_countR0 int

5. DECLARE @sql_cmd nchar(255)

6. DECLARE @i int

7. DECLARE cursorRO CURSOR FOR SELECT * FROM RO

8. DECLARE cursorRli CURSOR FOR SELECT * FROM @R1i

9. DELETE FROM RORes

10. OPEN cursorRO

11. SET @row_countR0=@@CURSOR_ROWS

12. SET @i=0

13. WHILE @i<@row_countR0

14. BEGIN

15. FETCH NEXT FROM cursorRO INTO @A, @R

16. SET @sql_cmd='INSERT INTO @R1i SELECT * FROM'+@R

17. EXEC (@sql_cmd)

18. OPEN cursorR1i

19. IF @@CURSOR_ROWS>@L

20. INSERT INTO R0Res(A, R) VALUES(@A, @R)

21. CLOSE cursorR1i

22. END

23. CLOSE cursorRO

В строке 3 определяется переменная-таблица, в которую будут размещаться таблицы R1i. В строке 4 определяются переменные для хранения полей таблицы R0 и переменные для организации цикла просмотра всей этой таблицы. В строке 5 определяется переменная для построения SQL-команды

INSERT INTO @R1i SELECT * FROM @R1i, (*)

которая перемещает очередную таблицу R1i в переменную-таблицу. Переменная @i используется для организации цикла считывания строк таблицы R0. В строках 7 и 8 определяются курсоры для чтения таблиц R0 и R1i, после чего в строках 10-13 формируется и запускается цикл построчного считывания таблицы R0. В теле цикла считывается очередная строка таблицы R0 и формируется SQL-команда (*), ссылка на таблицу R1i выбирается из прочитанной строки таблицы R0 (строки 15-16). В строке 17 выполняется сформированная SQL-команда, после чего переменная-таблица @R1i содержит все строки таблицы R1i. В строках 18-20 определяется число строк в таблице R1i и проверяется условие, если условие выполнено, строка таблицы R0, добавляется к таблице R0Res, и, поскольку, больше нет потребности в таблице R1i её курсор закрывается.

Средства языка Transact-SQL позволяют реализовать построенный таким образом метод, реализующий оператор SELECT <список полей> FROM R0 WHERE <число строк в таблице R1i>L >, как функцию возвращающую значение типа таблица.

Пример 2. Обработка таблиц в не первой нормальной форме оператором SELECT с групповой операцией UNION. Представление исходной таблицы в не первой нормальной форме и связанных с ней таблиц такое же, как и в примере 1. Текст хранимой процедуры, реализующей этот запрос приведен в листинге 2.

Листинг 2. Хранимая процедура для реализации запроса SELECT с групповой операцией UNION, определенной на

множестве таблиц

1. CREATE PROCEDURE [Select_NF_Groop]

2. DECLARE @R1i TABLE (B1 int, B2 int), @unionR1i TABLE (B1 int, B2 int)

3. DECLARE @A int, @R nchar(255), @row_countR0 int, @currentA int

4. DECLARE @sql_cmd nchar(255)

5. DECLARE @i, @n int

6. DECLARE cursorR0 CURSOR FOR SELECT * FROM R0

7. DELETE FROM R0Res

8. OPEN cursorR0

9. SET @row_countR0=@@CURSOR_ROWS

10. FETCH NEXT FROM cursorR0 INTO @A, @R

11. SET @currentA =@A

12. DELETE FROM @R1i

13. DELETE FROM @unionR1i

14. SET @sql_cmd='INSERT INTO @R1i SELECT * FROM'+@R

15. EXEC (@sql_cmd)

16. SET @i=1

17. WHILE @i<@row_countR0

18. BEGIN

19. FETCH NEXT FROM cursorR0 INTO @A, @R

20. IF @A = @currentA

21. BEGIN

22. SET @sql_cmd= 'INSERT INTO @unionR1i SELECT * FROM @R1;

UNION SELECT * FROM' + @R EXEC (@sql_cmd)

23. DELETE FROM @R1;

24. INSERT INTO @R1i SELECT * FROM @unionR1i

25. END

26. ELSE

27. BEGIN

28. SET @n = @n + 1

29. SET @sql_cmd= 'CREATE TABLE R' + CAST (@n AS nchar(4))+

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

' (B1 int, B2 int)'

30. EXEC (@sql_cmd)

31. SET @sql_cmd= 'INSERT INTO R + CAST (@n AS nchar(4))+

'SELECT * FROM @unionR1i'

32. EXEC (@sql_cmd)

33. INSERT INTO R0Res (A, R) VALUES (@A, 'R' +

CAST (@n AS nchar(4)))

34. DELETE FROM @R1i

35. DELETE FROM @unionR1i

36. SET @sql_cmd='INSERT INTO @R1i SELECT * FROM'+@R

37. EXEC (@sql_cmd)

38. END

39. SET @i = @i + 1

40. END

41. CLOSE cursorR0

В строке 2 определена таблица @unionR1i, в которой будет накапливаться объединение таблиц R1i, при фиксированном значении атрибута A. В строках 8-15 формируется таблица @unionR1i для первой строки таблицы R0. Затем выполняется цикл чтения таблицы R0. В теле цикла выполняются следующие действия. Если значение атрибута A очередной прочитанной строки совпадает с текущим значением этого атрибута в переменной @currentA, то в строках 22-24 формируется и выполняется команда объединения очередной таблицы R1i с таблицей @unionR1i. В противном случае в строках 28-37 создается новая таблица R1i, где i=n+1, которая заполняется данными из таблицы @unionR1i. Затем формируется очередная строка таблицы результата R0Res.

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

Литература

1. Кузнецов С.Д. Основы баз данных: учебное пособие - 2-е изд., испр. - М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2007. - 125с.

2. Дейт, К. Дж. Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом "Вильяме", 2005. -1022с.

3. Кузнецов С.Д. Объектно-реляционные базы данных: прошедший этап или недооцененные возможности? -Институт системного программирования РАН, 2007. - 117 стр.

4. Liskov B., Zilles S. Programming with abstract data types. - ACM SIGPLAN Notices Volume 9 Issue 4, April 1974. - P. 50 -59.

5. Канторович Л. В., Петрова А. Т. О математической символике, удобной при вычислениях на машинах. Труды 3-го Всесоюзного математического съезда. Секция вычислительной математики. 1956, т. II, с. 151.

6. Глушков В.М., Цейтлин Г.Е., Ющенко Е.Л. Алгебра. Языки программирование. - Киев: Наукова думка, 1989. - 376с. -ISBN 5-12-000499-7.

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