Jump to content

Объектно-реляционное несоответствие импеданса

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

Термин «рассогласование импедансов» происходит от согласования импедансов в электротехнике .

Несоответствия

[ редактировать ]

ОО математически представляет собой ориентированные графы , в которых объекты ссылаются друг на друга. Реляционный — это кортежи в таблицах с реляционной алгеброй . Кортежи — это поля данных, сгруппированные в «строку» с типизированными полями. Ссылки обратимы (INNER JOIN симметрично следует за внешними ключами в обратном направлении), образуя неориентированные графы .

Объектно-ориентированные концепции

[ редактировать ]

Инкапсуляция

[ редактировать ]

объекта Инкапсуляция скрывает внутренности. Свойства объекта отображаются только через реализованные интерфейсы. Однако многие ORM публично предоставляют свойства для работы со столбцами базы данных. Метапрограммирование ORM позволяет избежать нарушения инкапсуляции.

Доступность

[ редактировать ]

«Частное» и «публичное» основано на потребностях в реляционном отношении. В ОО это абсолютно основано на классах. Эта относительность и абсолютизм классификаций и характеристик сталкиваются.

Интерфейс, класс, наследование и полиморфизм

[ редактировать ]

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

Сопоставление с реляционными концепциями

[ редактировать ]

Чтобы ORM работал правильно, таблицы, связанные между собой отношениями «Внешний ключ / Первичный ключ», должны быть сопоставлены с ассоциациями в объектно-ориентированном анализе .

Различия типов данных

[ редактировать ]

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

SQL поддерживает строки максимальной длины (быстрее, чем без нее) и параметры сортировки . ОО имеет сопоставление только с процедурами сортировки и строками, ограниченными только памятью. SQL обычно игнорирует конечные пробелы во время сравнения char , но объектно-ориентированные библиотеки этого не делают. ОО не выполняет новый тип, используя ограничения на примитивы.

Структурные и целостные различия

[ редактировать ]

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

Реляционный метод использует декларативные ограничения на скалярные типы, атрибуты, переменные отношения и/или глобально. OO использует исключения, защищающие внутреннюю часть объекта.

Манипулятивные различия

[ редактировать ]

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

Транзакционные различия

[ редактировать ]

Единицей Relational является транзакция , превосходящая по размеру любые методы объектно-ориентированного класса. Транзакции включают в себя произвольные комбинации манипуляций с данными, в то время как ОО имеет только отдельные назначения примитивным полям. ОО не хватает изоляции и долговечности, поэтому атомарность и согласованность присущи только примитивам.

Устранение несоответствия импеданса

[ редактировать ]

Решения начинаются с признания различий между логическими системами. Это минимизирует или компенсирует несоответствие. [1]

Альтернативные архитектуры

[ редактировать ]
  1. НетSQL . Несоответствие заключается не между ОО и СУБД. Объектно-реляционное несоответствие импеданса одноименно только между ОО и R СУБД. Альтернативы, такие как базы данных NoSQL или XML, позволяют избежать этого.
  2. Функционально-реляционное отображение . Функциональное программирование — популярная альтернатива объектно-ориентированному программированию . Понимания в функциональных языках программирования изоморфны реляционным запросам. [2] Некоторые языки функционального программирования реализуют функционально-реляционное отображение. [3] Прямое соответствие между пониманиями и запросами позволяет избежать многих проблем объектно-реляционного отображения.

Минимизация в ОО

[ редактировать ]

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

Другое решение объединяет логику предметной области и платформы. Здесь объектно-ориентированный подход отображает реляционные аспекты во время выполнения, а не статически. Платформы имеют класс кортежа (также называемый строкой или объектом) и класс отношения (он же набор данных).

Преимущества

[ редактировать ]
  • Переход к инфраструктурам и автоматизации транспортировки, представления и проверки данных.
  • Меньше, быстрее и быстрее код [ нужна ссылка ]
  • Динамическая схема базы данных
  • Пространство имен и семантическое соответствие
  • Выразительные ограничения
  • Избегает сложного картографирования

Недостатки

[ редактировать ]
  • Никакой статической типизации. Типизированные средства доступа смягчают это.
  • Стоимость косвенной производительности
  • Игнорирует такие понятия, как полиморфизм.

Компенсация

[ редактировать ]

Смешение ОО- уровней дискурса проблематично. В основном поддержка фреймворка компенсирует это за счет автоматизации манипулирования данными и шаблонов представления на уровне моделирования. рефлексия и генерация кода Используются . В Reflection код рассматривается как данные, что обеспечивает автоматическую транспортировку, представление и целостность данных. Генерация превращает схемы в классы и помощники. Оба имеют аномалии между уровнями, где сгенерированные классы имеют как свойства домена (например, имя, адрес, телефон), так и свойства платформы (например, IsModified).

возникновение

[ редактировать ]

Хотя несоответствия объектно-реляционного импеданса могут возникать при объектно-ориентированном программировании в целом, особая проблема возникает с объектно-реляционными преобразователями (ORM). [5] Поскольку ORM часто задается с точки зрения конфигурации, аннотаций и ограниченных предметно-ориентированных языков , ему не хватает гибкости полного языка программирования для устранения несоответствия импедансов.

Разногласия

[ редактировать ]

Истинная модель СУБД

[ редактировать ]

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

Ограничения и незаконные транзакции

[ редактировать ]

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

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

Импеданс, специфичный для SQL, и обходные пути

[ редактировать ]

В SQL отсутствуют типы предметной области, что затрудняет объектно-ориентированное моделирование. Между СУБД и приложением (ОО или нет) существуют потери. Однако многие избегают NoSQL и альтернативных языков запросов, специфичных для конкретных поставщиков. СУБД также игнорируют Business System 12 и Tutorial D.

Эту проблему решают основные СУБД, такие как Oracle и Microsoft SQL Server. ОО-код (Java и .NET соответственно) расширяет их и вызывается в SQL так же свободно, как если бы он был встроен в СУБД. Повторное использование библиотечных процедур в нескольких схемах является поддерживаемой современной парадигмой.

ОО находится на бэкэнде, потому что SQL никогда не получит современных библиотек и структур для современных программистов, несмотря на то, что комитет ISO SQL-99 хочет добавить процедурные возможности. Разумно использовать их напрямую, а не менять SQL. Это размывает разделение ответственности между «программированием приложений» и «администрированием баз данных», поскольку реализация ограничений и триггеров теперь требует навыков как администратора базы данных, так и объектно-ориентированного программирования.

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

Расположение канонической копии данных

[ редактировать ]

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

Разделение ответственности

[ редактировать ]

Новые функции меняют как код, так и схемы. За схему отвечает администратор базы данных. Администраторы баз данных несут ответственность за надежность, поэтому они отказываются от ненужных модификаций программистов. Промежуточные базы данных помогают лишь перенести утверждение на время выпуска. Администраторы баз данных хотят содержать изменения в коде, где дефекты менее катастрофичны.

Большее сотрудничество решает эту проблему. Решения об изменении схемы должны исходить из потребностей бизнеса. Новые данные или повышение производительности изменяют схему.

Философские разногласия

[ редактировать ]

Существуют ключевые философские различия:

  • Декларативные и императивные интерфейсы . Реляционный интерфейс использует декларативные данные, а объектно-ориентированный интерфейс использует императивное поведение. Лишь немногие компенсируют реляционность триггерами и хранимыми процедурами.
  • Привязка к схеме — реляционное ограничение строк в соответствии с их схемами объектов. Наследование ОО (дерево или нет) аналогично. OO также может добавлять атрибуты. Новые и немногочисленные системы динамических баз данных не ограничивают это для реляционных систем.
  • Правила доступа . Реляционный тип использует стандартизированные операторы, а объектно-ориентированные классы имеют отдельные методы. Объектно-ориентированный подход более выразителен, но реляционный подход имеет математическое мышление, целостность и согласованность дизайна.
  • Связь между существительными и глаголами . ОО- класс — это существительная сущность, тесно связанная с действиями глаголов. Это формирует концепцию . Реляционный подход оспаривает естественность и логичность этой тесной ассоциации.
  • Идентичность объекта . Два изменяемых объекта с одинаковым состоянием различаются. Реляционный метод игнорирует эту уникальность и должен создавать ее с использованием потенциальных ключей , но это плохая практика, если этот идентификатор не существует в реальном мире. Идентичность является постоянной в реляционной системе, но может быть временной в объектно-ориентированном.
  • Нормализация – ООП игнорирует реляционную нормализацию . Однако объекты, связанные между собой указателями, возможно, представляют собой сетевую базу данных , которая, возможно, является крайне денормализованной реляционной базой данных .
  • Наследование схемы . Реляционные схемы отвергают иерархическое наследование ОО. Реляционная теория принимает более мощную теорию множеств . Непопулярное недревесное (не Java ) ОО существует, но оно сложнее, чем реляционная алгебра.
  • Структура против поведения . ООП фокусируется на структуре (ремонтопригодность, расширяемость, возможность повторного использования, безопасность). Реляционный фокусируется на поведении (эффективность, адаптивность, отказоустойчивость, живучесть, логическая целостность и т. д.). ОО-код служит программистам, а реляционный делает упор на поведение, видимое пользователю. Однако это может быть неприсуще реляционным представлениям, поскольку представления для конкретных задач обычно представляют информацию для подзадач, но IDE игнорируют это и предполагают, что используются объекты.
  • Отношения множеств и графов . Реляционные отношения следуют теории множеств , но ОО следует теории графов . Несмотря на эквивалентность, парадигмы доступа и управления различаются.

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

ORM ситуативно предлагают преимущества. Скептики ссылаются на недостатки и малую ценность при слепом применении. [11]

См. также

[ редактировать ]
  1. ^ Классификация объектно-реляционного несоответствия импеданса. Ирландия, Кристофер; Бауэрс, Дэвид; Ньютон, Майк и Во, Кевин (2009). Классификация объектно-реляционного несоответствия импедансов. В: Первая международная конференция по достижениям в области баз данных, знаний и приложений данных (DBKDA), 1–6 марта 2009 г., Канкун, Мексика.
  2. ^ https://nbviewer.org/github/phelps-sg/python-bigdata/blob/master/src/main/ipynb/relational-python.ipynb
  3. ^ https://scala-slick.org/doc/stable/introduction.html.
  4. ^ CJ Date, Сочинения о реляционных базах данных
  5. ^ Возвращение к объектно-реляционному сопоставлению - количественное исследование влияния технологии баз данных на стратегии O/R-сопоставления. М. Лоренц, Дж. П. Рудольф, Г. Гессе, М. Уфлакер, Х. Платтнер. Гавайская международная конференция по системным наукам (HICSS), 4877-4886 (DOI: 10.24251/hicss.2017.592)
  6. ^ Дэйт, Кристофер «Крис» Дж.; Паскаль, Фабиан (12 августа 2012 г.) [2005], «Тип против домена и класса», Разоблачение базы данных (журнал Всемирной паутины) , Google , получено 12 сентября 2012 г.
  7. ^ ——— (2006), «4. О понятии логического различия», Дата в базе данных: статьи 2000–2006 гг ., Голос эксперта в базе данных; Выборочные статьи о реляционных базах данных, США : Apress, стр. 39, ISBN  978-1-59059-746-0 Класс кажется неотличимым от типа в классическом понимании этого термина .
  8. ^ ——— (2004), «26. Объектные/реляционные базы данных» , Введение в системы баз данных (8-е изд.), Пирсон Аддисон Уэсли, стр. 859 , ISBN  978-0-321-19784-9 , ...любое такое сближение должно быть прочно основано на реляционной модели .
  9. ^ Дэйт, Кристофер «Крис» Дж .; Дарвен, Хью , «2. Объекты и отношения», Третий манифест , Первая великая ошибка
  10. ^ Ньюард, Тед (26 июня 2006 г.). «Вьетнам компьютерных наук» (PDF) . Взаимодействие происходит . Проверено 2 июня 2010 г.
  11. ^ Джонсон, Род (2002). J2EE Проектирование и разработка . Врокс Пресс. п. 256 . ISBN  9781861007841 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 10bc44a098bfdf935872f78ffeac7a38__1719909120
URL1:https://arc.ask3.ru/arc/aa/10/38/10bc44a098bfdf935872f78ffeac7a38.html
Заголовок, (Title) документа по адресу, URL1:
Object–relational impedance mismatch - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)