Объектно-реляционное отображение
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2009 г. ) |
Объектно-реляционное отображение ( ORM , O/RM и инструмент отображения O/R ) в информатике — это метод программирования для преобразования данных между реляционной базой данных и кучей объектно -ориентированного языка программирования. По сути, это создает базу данных виртуальных объектов , которую можно использовать из языка программирования.
В объектно-ориентированном программировании задачи управления данными воздействуют на объекты , которые объединяют скалярные значения в объекты. Например, рассмотрим запись адресной книги, которая представляет одного человека, ноль или более номеров телефонов и ноль или более адресов. В объектно-ориентированной реализации это можно смоделировать с помощью « объекта Person » с атрибутом/полем для хранения каждого элемента данных, содержащегося в записи: имени человека, списка телефонных номеров и списка адресов. Список телефонных номеров сам будет содержать «объекты PhoneNumber» и т. д. Каждая такая запись адресной книги рассматривается языком программирования как отдельный объект (например, на нее может ссылаться одна переменная, содержащая указатель на объект). различные методы С объектом могут быть связаны , например методы возврата предпочтительного номера телефона, домашнего адреса и т. д.
Напротив, реляционные базы данных, такие как SQL , группируют скаляры в кортежи , которые затем перечисляются в таблицах . Кортежи и объекты имеют некоторое общее сходство в том, что они оба являются способами сбора значений в именованные поля, так что всей коллекцией можно управлять как единым составным объектом. Однако у них есть много различий, в частности: управление жизненным циклом (вставка и удаление строк по сравнению со сборкой мусора или подсчетом ссылок ), ссылки на другие сущности (ссылки на объекты по сравнению со ссылками на внешние ключи) и наследование (отсутствует в реляционных базах данных). . Кроме того, объекты управляются в куче и находятся под полным контролем одного процесса, а кортежи базы данных являются общими и должны включать блокировку, слияние и повторную попытку. Объектно-реляционное сопоставление обеспечивает автоматическую поддержку сопоставления кортежей с объектами и обратно с учетом всех этих различий. [ 1 ]
Суть проблемы заключается в переводе логического представления объектов в атомизированную форму, которую можно хранить в базе данных, сохраняя при этом свойства объектов и их отношения, чтобы при необходимости их можно было перезагрузить как объекты. Если эта функциональность хранения и извлечения реализована, объекты называются постоянными . [ 1 ]
Обзор
[ редактировать ]Детали реализации драйверов хранения обычно заключаются в API на используемом языке программирования, предоставляя методы для взаимодействия с носителем данных более простым и более соответствующим парадигмам окружающего кода способом.
Ниже приведен простой пример, написанный на коде C# , для выполнения запроса, написанного на SQL, с использованием ядра базы данных.
var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];
Напротив, в следующем примере используется API-интерфейс ORM-задания, который позволяет писать код, который естественным образом использует возможности языка.
var person = repository.GetPerson(10);
var firstName = person.GetFirstName();
В приведенном выше случае используется объект, представляющий репозиторий хранилища, и методы этого объекта. Другие платформы могут предоставлять код в виде статических методов, как в примере ниже, а другие методы могут вообще не реализовывать объектно-ориентированную систему. Часто выбор парадигмы делается для наилучшего соответствия ORM принципам проектирования окружающего языка.
var person = Person.Get(10);
Сравнение с традиционными методами доступа к данным
[ редактировать ]По сравнению с традиционными методами обмена между объектно-ориентированным языком и реляционной базой данных ORM часто уменьшает объем кода, который необходимо написать. [ 2 ]
Недостатки инструментов ORM обычно связаны с высоким уровнем абстракции, скрывающим то, что на самом деле происходит в коде реализации. Кроме того, сильная зависимость от программного обеспечения ORM считается основным фактором создания плохо спроектированных баз данных. [ 3 ]
Объектно-ориентированные базы данных
[ редактировать ]Другой подход — использовать объектно-ориентированную систему управления базами данных (OODBMS) или документо-ориентированные базы данных, такие как собственные базы данных XML , которые обеспечивают большую гибкость при моделировании данных. ООСУБД — это базы данных, разработанные специально для работы с объектно-ориентированными значениями. Использование ООСУБД устраняет необходимость преобразования данных в форму SQL и обратно, поскольку данные хранятся в исходном объектном представлении, а отношения представляются напрямую, а не требуют объединения таблиц /операций. Эквивалент ORM для документо-ориентированных баз данных называется устройствами сопоставления объектов и документов (ODM).
Документно-ориентированные базы данных также избавляют пользователя от необходимости «разбивать» объекты на строки таблицы. Многие из этих систем также поддерживают язык запросов XQuery для получения наборов данных.
Объектно-ориентированные базы данных, как правило, используются в сложных нишевых приложениях. Одним из аргументов против использования ООСУБД является то, что она не сможет выполнять специальные, независимые от приложения запросы. [ нужна ссылка ] По этой причине многие программисты чувствуют себя более комфортно с системой сопоставления объектов SQL, хотя большинство объектно-ориентированных баз данных способны обрабатывать запросы SQL в ограниченной степени. Другие ООСУБД обеспечивают репликацию в базы данных SQL как средство удовлетворения потребности в специальных запросах, сохраняя при этом хорошо известные шаблоны запросов. [ нужна ссылка ]
Проблемы
[ редактировать ]При рассмотрении вопроса о том, как сопоставить объектную систему с реляционной базой данных, возникают разнообразные трудности. Эти трудности называются объектно-реляционным несоответствием импедансов . [ 4 ]
Альтернативой реализации ORM является использование собственных процедурных языков, имеющихся в каждой крупной базе данных. Их можно вызывать из клиента с помощью операторов SQL. Шаблон проектирования Data Access Object (DAO) используется для абстрагирования этих операторов и предлагает легкий объектно-ориентированный интерфейс для остальной части приложения. [ 5 ]
См. также
[ редактировать ]- Список программного обеспечения объектно-реляционного картографирования
- Сравнение программного обеспечения объектно-реляционного картографирования
- AutoFetch – автоматическая настройка запроса
- Общая архитектура брокера объектных запросов (CORBA)
- База данных объектов
- Сохранение объекта
- Объектно-реляционная база данных
- Объектно-реляционное несоответствие импеданса
- Реляционная модель
- SQL (язык структурированных запросов)
- Объекты данных Java (JDO)
- Java Persistence API (JPA), теперь Jakarta Persistence
- Объекты сервисных данных
- Entity Framework
- Шаблон активной записи
- Шаблон преобразователя данных
- Наследование одной таблицы
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Что такое объектно-реляционное сопоставление?» . Обзор режима гибернации . JBOSS в спящем режиме . Проверено 27 января 2022 г.
- ^ Дуглас Барри, Торстен Станьенда, «Решение проблемы хранения объектов 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.
- ^ Джош Беркус, «Разрушение вашей базы данных», Компьютер, август 2009 г., https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
- ^ Возвращение к объектно-реляционному сопоставлению - количественное исследование влияния технологии баз данных на стратегии O/R-сопоставления. М. Лоренц, Дж. П. Рудольф, Г. Гессе, М. Уфлакер, Х. Платтнер. Гавайская международная конференция по системным наукам (HICSS), 4877-4886 (DOI: 10.24251/hicss.2017.592)
- ^ Фейерштейн, Стивен; Билл Прибыл (сентябрь 1997 г.). «Программирование Oracle PL/SQL» . 18.5 Изменение постоянных объектов . Проверено 23 августа 2011 г.
{{cite web}}
: CS1 maint: местоположение ( ссылка )