Объектно-реляционное отображение ( 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]
{{cite web}}
: CS1 maint: location (link)