stringtranslate.com

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

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

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

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

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

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

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

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

Доступность

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

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

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

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

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

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

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

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

Различия в структуре и целостности

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

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

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

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

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

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

Решение проблемы несоответствия импеданса

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

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

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

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

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

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

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

Недостатки

Компенсация

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

Происшествие

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

Разногласие

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

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

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

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

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

Специфическое для SQL сопротивление и обходные пути

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. ^ Классификация несоответствия объектно-реляционного импеданса. Ирландия, Кристофер; Боуэрс, Дэвид; Ньютон, Майк и Во, Кевин (2009). Классификация несоответствия объектно-реляционного импеданса. В: Первая международная конференция по достижениям в области баз данных, знаний и приложений данных (DBKDA), 1-6 марта 2009 г., Канкун, Мексика.
  2. ^ «Просмотрщик блокнотов Jupyter».
  3. ^ "Введение · Слик".
  4. ^ CJ Date, Сочинения по реляционным базам данных
  5. ^ Объектно-реляционное отображение: повторный взгляд — количественное исследование влияния технологии баз данных на стратегии отображения O/R. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Гавайская международная конференция по системным наукам (HICSS), 4877-4886 (DOI:10.24251/hicss.2017.592)
  6. Дата, Кристофер «Крис» Дж.; Паскаль, Фабиан (2012-08-12) [2005], «Тип против Домена и Класса», Database debunkings (журнал World Wide Web) , Google , получено 12 сентября 2012 г..
  7. ^ ——— (2006), «4. О понятии логического различия», Дата в базе данных: труды 2000–2006 , Голос эксперта в базе данных; Избранные труды по реляционным базам данных, США : Apress, стр. 39, ISBN 978-1-59059-746-0Класс , по-видимому, неотличим от типа, как этот термин понимается в классическом смысле..
  8. ^ ——— (2004), "26. Объектно-реляционные базы данных", Введение в системы баз данных (8-е изд.), Pearson Addison Wesley, стр. 859, ISBN 978-0-321-19784-9, ...любое такое сближение должно прочно основываться на реляционной модели.
  9. ^ Дейт, Кристофер «Крис» Дж .; Дарвен, Хью , «2. Объекты и отношения», Третий манифест , Первая большая ошибка
  10. ^ Ньюард, Тед (2006-06-26). "Вьетнам компьютерной науки" (PDF) . Взаимодействие происходит . Получено 2010-06-02 .
  11. ^ Джонсон, Род (2002). Проектирование и разработка J2EE . Wrox Press. стр. 256. ISBN 9781861007841.

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