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

УДК 519.6:004.4

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

В.А. Астапов, инженер-программист

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

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

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

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

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

В качестве объектно-ориентированного языка был выбран язык программирования Java, разработанный компанией Sun Microsystems (США, штат Калифорния, г.Санта-Клара) в 1995 году. Среди других языков ООП, изученных при данном исследовании, Java выделяется своей кросс-платформенностью и большим количеством библиотек для бесплатного использования.

Для СУБД была выбрана MySQL (разработана Д.Аксмарком и М.Видениусом в 1995 году, Швеция). MySQL является бесплатной СУБД и представляет собой образец для исследования реляционных баз данных.

Основным способом связи с базой данных и работой с ней из Java-приложения является использование JDBC-драйвера (Java DataBase Connectivity). Простота использования такого драйвера является и плюсом и минусом - запросы к базе выполняются непосредственно передачей из кода приложения строки запроса и возвращаются в виде такой же неформатированной строки. При этом объектная природа языка программирования начисто теряется, т.к. система бессвязная: с одной стороны объекты и переменные, с другой - таблицы и связи.

Для решения вопроса связи языка программирования и баз данных служит объектно-реляционное отображение. Существует ряд решений, позволяющий сохранять объекты в базе данных (технологии Hibernate, JPA). Рассмотрим, как выглядят связи со стороны объектнореляционного отображения и со стороны реляционной базы данных.

Обозначение связей на схеме:

—- 1:1 Non-Identifying Relationship 1:11:n Non-Identifying Relationship --<1:1 Identifying Relationship n 1:n Identifying Relationship ~ n:m Non-Identifying Relationship

Идентифицирующая зависимость (Identifying Relationship) - это i " такая связь между таблицами, когда строки дочерней таблицы строго >-< определяются родительскими и не могут существовать без них.

Неидентифицирующая зависимость (Non-Identifying Relationship) - связь, когда дочерняя и родительская таблицы независимы и строки дочерней не определяются родительской (могут существовать без них).

Отношение 1:1 Unidirectional

public class Example1 {

@OneToOne

@JoinColumn

Example2 example2;

}

В данном случае класс Example1 знает о классе Example2 (посредством одного внешнего ключа), но не наоборот. Следует обратить внимание, что в классе Account создается поле User для ссылки на одноименный класс и в его таблице создается внешний ключ. Кроме того, если при вызове EntityManager.remove() у удаляемого объекта уже есть связь такого рода, будет выброшено исключение. В таких случаях требуется самостоятельно создать функционал удаления зависимых объектов в первую очередь.

Рис.1 Однонаправленное отношение

При таком использовании однонаправленного отношения в любом случае создается связь типа 1:n Non-Identifying Relationship посредством связи первичного и внешнего ключей. При попытке связать две таблицы однонаправленным отношением через первичные ключи никакой ошибки не выбрасывается, однако в БД никакой связи не создается.

В1Шгес1юпа!

Если попытаться в классах Example1 и Example2 указать отношение один к одному, то можно наблюдать создание двух однонаправленных отношений:

Рис.2 Один-к-одному отношения в обоих классах

Из рисунка видно, что по логике данная связь существовать не может (взаимная блокировка таблиц, без Example1 нельзя создать Example, без Example2 нельзя создать Example1). Однако для логики СУБД это не является ошибкой.

Используем параметр mappedBy для указания связи один-к-одному:

public class Example1 {

@OneToOne

Example2 example2;

}

Отношения в базе данных теперь выглядят следующим образом:

Рис.3 Отношения один-к-одному. В коде приложения используется указатель

mappedBy.

Можно заметить, что в логике программы теперь это совершенно корректные отношения «один-к-одному», однако отношения со стороны БД так и остались 1:n Non-Identifying Relationship.

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

Литература:

1.Абонеев, В.В. Доктрина информатизации сельского хозяйства /В.В. Абонеев, Ю.Д. Квитко, Д.Е. Белов, А.Е. Мищенко, А.Ф. Шалин, С.О. Сиптиц, М.В. Макеев, И.М. Кузнецов, Ю.И. Соколов /Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства. -2012. -Т. 3. -№ 1-1. -С. 3-7.

2.Абонеев, В.В. Концепция развития информационных систем в сельском хозяйстве /В.В. Абонеев, Ю.Д. Квитко, Д.Е. Белов, Т.В. Ефимова, А.Ф. Шалин, С.О. Сиптиц, И.М. Кузнецов, М.В. Макеев, Ю.И Соколов //Овцы, козы, шерстяное дело. -2012. -№ 2. -С. 14.

3.Абонеев, В.В. Стратегия развития овцеводства в Российской Федерации /В.В. Абонеев //Достижения науки и техники АПК. -2008.-№10. -С. 3739

4.Белов, Д.Е. Влияние лейкоза на молочную продуктивность коров /Д.Е. Белов, Л.Н. Чижова //Сборник научных трудов Ставропольского научноисследовательского института животноводства и кормопроизводства, 2006. -Т. 2. -№ 2-2. -С. 152-156.

5.Белов, Д.Е. Инновационные аспекты в кормлении сельскохозяйственных животных /Д.Е. Белов, Ю.Д. Квитко, Б.Т. Абилов, Н.Ю. Скабелкина //Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства, 2011. -Т.1. -№ 4-1. -С. 68-70.

6.Белов, Д.Е. Совершенствование биотехнологических и молекулярногенетических методов при изучении генов, определяющих устойчивость к заболеваниям и молочную продуктивность /Д.Е. Белов //Автореферат

диссертации на соискание ученой степени кандидата биологических наук //Ставропольский государственный университет. Ставрополь, 2006.

7.Белов, Д.Е. Совершенствование биотехнологических и молекулярногенетических методов при изучении генов, определяющих устойчивость к заболеваниям и молочную продуктивность /Д.Е. Белов //Диссертация на соискание ученой степени кандидата биологических наук /Ставрополь, 2006.

8.Белов, Д.Е. Технологии разработки систем управления информацией с открытым исходным кодом, проблемы внедрения в животноводстве России /Д.Е. Белов, В.В. Абонеев, А.Ф. Шалин //Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства. -2011. -Т. 1. -№ 4-1. -С. 96-100.

9.Букаров, Н.Г. И еще раз о маркерной селекции в скотоводстве /Н.Г. Букаров, С.Ф. Силкина, Д.Е. Белов //Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства. -2012. -Т. 3. -№ 1-1. -С. 61-62.

10. Квитко, Ю.Д. Применение математических методов для оптимизации рационов сельскохозяйственных животных /Ю.Д. Квитко, Б.Т. Абилов, Д.Е. Белов, Т.В. Ефимова, А.Ф. Шалин //Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства. -2012. -Т. 2. -№1. -С. 257-260.

11.Ковалюк, Н.В. Использование генетического маркера BOLA-DRB3 для оптимизации селекционного процесса при скрещивании /Н.В. Ковалюк, В.Ф. Сацук //Молочное скотоводство.-2010.-№2.-С.10-12.

12.Колосов, Ю.А. Какие же люди «съели овец»? /Ю.А. Колосов, Д.Е. Белов //Овцы, козы, шерстяное дело. -2013. -№ 2. -С. 57-60.

13. Красовская, Т.Л. Морфофизиологические и продуктивные показатели ягнят при скармливании гумивала /Т.Л. Красовская //Политематический сетевой электронный научный журнал Кубанского государственного аграрного университета, 2012. - № 81. - С. 486-497.

14.Новопашина, С.И. Влияние гумивала на продуктивные качества и состояние крови козлят и ягнят /С.И. Новопашина, М.Ю. Санников, Т.Л. Красовская //Вестник ветеринарии, 2011. -Т. 59. - № 4. - С. 185-190.

16. Новопашина, С.И. Состояние и перспективы молочного козоводства в Российской Федерации /С.И. Новопашина, М.Ю. Санников //Овцы, козы, шерстяное дело. -2010. -№ 4 -С10-13.

17. Новопашина, С.И. Методика оценки качественных показателей козьего молока ультразвуковым методом. Метод. пособие /С.И. Новопашина, М.Ю. Санников //Ставрополь: СНИИЖК, 2009. -7 с.

18. Новопашина, С.И. Эффективность молочного козоводства в разных регионах РФ /С.И. Новопашина, М.Ю. Санников //Овцы. Козы. Шерстяное дело, 2011. -№ 1. -С 1-2.

19. Новопашина, С.И. Мясное козоводство в России -перспективы развития (Российская Федерация Некоммерческая организация

«Национальный союз овцеводов») /С.И. Новопашина, М.Ю. Санников //Информационный бюллетень №2(4).-Ставрополь, 2012. -С. 62-65.

20. Санников, М.Ю. Взаимосвязь динамики прироста живой массы с уровнем перекисного окисления липидов у овец /М.Ю. Санников //Технология и экономика овцеводства. Сб. научных статей, 1992. -С.92-98.

21. Санников, М.Ю. Математическое моделирование физиологических процессов для прогнозирования продуктивных качеств овец /М.Ю. Санников //Сб. науч. тр. ВНИИОК «Технология и экономика овцеводства», Ставрополь, 1992. -С. 99-101.

22. Чижова, Л.Н. Использование полимеразной цепной реакции в диагностике лейкоза КРС /Л.Н. Чижова, Д.Е. Белов //Сборник научных трудов Ставропольского научно-исследовательского института животноводства и кормопроизводства. -2004. -Т. 2. -№ 2-2. -С. 65-69.