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

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

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

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

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

Обзор

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

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

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

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

вар человек = хранилище.GetPerson(10);вар имя = человек.GetFirstName();

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

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

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

вар человек = Человек.Получать(Человек.Характеристики.Идентификатор == 10);

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

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

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

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

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

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

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

Вызовы

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

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

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

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

  1. ^ а б "Что такое объектно-реляционное отображение?". Обзор гибернации. JBOSS Hibernate. Получено 19 апреля 2011.
  2. ^ Дуглас Барри, Торстен Станиенда, "Решение проблемы хранилища объектов Java", Компьютер, т. 31, нет. 11, стр. 33-40, ноябрь 1998 г., http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 , Выдержка на http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. Строки кода, использующие O / R, - это лишь часть тех, которые необходимы для интерфейса уровня вызовов (1: 4). Для этого упражнения требовалось 496 строк кода с использованием ODMG Java Binding по сравнению с 1923 строками кода с использованием JDBC.
  3. ^ Джош Беркус, "Разрушение вашей базы данных", Компьютер, август 2009 г., http://it.toolbox.com/blogs/database-soup/wrecking-your-database-33298, Интернет-конференция на https://www.youtube.com/watch?v=uFLRc6y_O3s
  4. ^ Обзор объектно-реляционного сопоставления - количественное исследование влияния технологии баз данных на стратегии сопоставления операционных систем. М. Лоренц, Дж. П. Рудольф, Г. Гессе, М. Юфлакер, Х. Платтнер. Гавайская международная конференция по системным наукам (HICSS), 4877-4886 (DOI: 10.24251 / hicss.2017.592)
  5. ^ Фейерштейн, Стивен; Билл Прибыл (сентябрь 1997 г.). «Программирование Oracle PL / SQL». 18.5 Изменение постоянных объектов. Получено 23 августа 2011.CS1 maint: location (связь)

внешняя ссылка