stringtranslate.com

Объектно-реляционное отображение

Объектно-реляционное отображение ( ORM , O/RM и инструмент отображения O/R ) в информатике — это метод программирования для преобразования данных между реляционной базой данных и кучей объектно -ориентированного языка программирования. По сути, это создает базу данных виртуальных объектов , которую можно использовать из языка программирования.

В объектно-ориентированном программировании задачи управления данными воздействуют на объекты , которые объединяют скалярные значения в объекты. Например, рассмотрим запись адресной книги, которая представляет одного человека, ноль или более номеров телефонов и ноль или более адресов. В объектно-ориентированной реализации это можно смоделировать с помощью « объекта Person » с атрибутом/полем для хранения каждого элемента данных, который содержит запись: имя человека, список телефонных номеров и список адресов. Список телефонных номеров сам будет содержать «объекты PhoneNumber» и т. д. Каждая такая запись адресной книги рассматривается языком программирования как отдельный объект (например, на нее может ссылаться одна переменная, содержащая указатель на объект). С объектом могут быть связаны различные методы , например методы возврата предпочтительного номера телефона, домашнего адреса и т. д.

Напротив, реляционные базы данных, такие как SQL , группируют скаляры в кортежи , которые затем перечисляются в таблицах . Кортежи и объекты имеют некоторое общее сходство в том, что они оба являются способами сбора значений в именованные поля, так что всей коллекцией можно управлять как единым составным объектом. Однако у них есть много различий, в частности: управление жизненным циклом (вставка и удаление строк по сравнению со сборкой мусора или подсчетом ссылок ), ссылки на другие сущности (ссылки на объекты по сравнению со ссылками на внешние ключи) и наследование (отсутствует в реляционных базах данных). . Кроме того, объекты управляются в куче и находятся под полным контролем одного процесса, а кортежи базы данных являются общими и должны включать блокировку, слияние и повторные попытки. Объектно-реляционное сопоставление обеспечивает автоматическую поддержку сопоставления кортежей с объектами и обратно с учетом всех этих различий. [1]

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

Обзор

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

Ниже приведен простой пример, написанный на коде C# , для выполнения запроса, написанного на SQL, с использованием ядра базы данных.

var sql = "ВЫБЕРИТЕ id, имя, фамилию, телефон, дату рождения, пол, возраст ОТ лиц, ГДЕ id = 10" ; вар результат = контекст . Лица . FromSqlRaw ( sql ). К списку (); имя вар = результат [ 0 ][ "первое_имя" ];         

Напротив, в следующем примере используется API-интерфейс ORM-задания, который позволяет писать код, который естественным образом использует возможности языка.

вар человек = репозиторий . ПолучитьПерсона ( 10 ); вар firstName = person . ПолучитьПервоеИмя ();      

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

вар человек = Человек . Получить ( 10 );   

Сравнение с традиционными методами доступа к данным

По сравнению с традиционными методами обмена между объектно-ориентированным языком и реляционной базой данных ORM часто уменьшает объем кода, который необходимо написать. [2]

Недостатки инструментов ORM обычно связаны с высоким уровнем абстракции , скрывающим то, что на самом деле происходит в коде реализации. Кроме того, сильная зависимость от программного обеспечения ORM считается основным фактором создания плохо спроектированных баз данных. [3]

Объектно-ориентированные базы данных

Другой подход заключается в использовании объектно-ориентированной системы управления базами данных (ООСУБД) или документо-ориентированных баз данных, таких как собственные базы данных XML , которые обеспечивают большую гибкость при моделировании данных. ООСУБД — это базы данных, разработанные специально для работы с объектно-ориентированными значениями. Использование ООСУБД устраняет необходимость преобразования данных в форму SQL и обратно, поскольку данные хранятся в исходном объектном представлении, а отношения представляются напрямую, а не требуют объединения таблиц /операций. Эквивалент ORM для документо-ориентированных баз данных называется устройствами сопоставления объектов и документов (ODM).

Документно-ориентированные базы данных также избавляют пользователя от необходимости «разбивать» объекты на строки таблицы. Многие из этих систем также поддерживают язык запросов XQuery для получения наборов данных.

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

Проблемы

При рассмотрении вопроса о том, как сопоставить объектную систему с реляционной базой данных, возникают разнообразные трудности. Эти трудности называются объектно-реляционным несоответствием импедансов . [4]

Альтернативой реализации ORM является использование собственных процедурных языков, имеющихся в каждой крупной базе данных. Их можно вызывать из клиента с помощью операторов SQL. Шаблон проектирования Data Access Object (DAO) используется для абстрагирования этих операторов и предлагает легкий объектно-ориентированный интерфейс для остальной части приложения. [5]

Смотрите также

Рекомендации

  1. ^ ab «Что такое объектное/реляционное сопоставление?». Обзор режима гибернации . JBOSS в спящем режиме . Проверено 27 января 2022 г.
  2. ^ Дуглас Барри, Торстен Станиенда, «Решение проблемы хранения объектов Java», Computer, vol. 31, нет. 11, стр. 33–40, ноябрь 1998 г., отрывок по адресу https://www.service-architecture.com/articles/object-relational-mapping/transparent-persistence-vs-jdbc-call-level-interface.html Lines. кода, использующего O/R, составляют лишь часть того, что необходимо для интерфейса уровня вызова (1:4). Для этого упражнения потребовалось 496 строк кода с использованием привязки Java ODMG по сравнению с 1923 строками кода с использованием JDBC.
  3. ^ Джош Беркус, «Разрушение вашей базы данных», Компьютер, август 2009 г., https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
  4. ^ Возвращение к объектно-реляционному сопоставлению - количественное исследование влияния технологии баз данных на стратегии O/R-сопоставления. М. Лоренц, Дж. П. Рудольф, Г. Гессе, М. Уфлакер, Х. Платтнер. Гавайская международная конференция по системным наукам (HICSS), 4877-4886 (DOI: 10.24251/hicss.2017.592)
  5. ^ Фейерштейн, Стивен; Билл Прибыл (сентябрь 1997 г.). «Программирование Oracle PL/SQL». 18.5 Изменение постоянных объектов . Проверено 23 августа 2011 г.{{cite web}}: CS1 maint: location (link)

Внешние ссылки