Является ли ORM проблемой, специфичной для объектно-ориентированного программирования? - PullRequest
6 голосов
/ 02 сентября 2010

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

Но проблема не та же, еслиВы используете структуры для отображения реляционных баз данных в C?А кортежи / записи на функциональном языке программирования?Или я что-то упустил, так как я не написал приложение базы данных на C или на функциональном языке.

Ответы [ 4 ]

6 голосов
/ 02 сентября 2010

Ну, и да, и нет .

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

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

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

6 голосов
/ 02 сентября 2010

По крайней мере, по крайней мере, это "несоответствие импеданса", по-видимому, свойственно ситуациям, когда кто-то желает вставить отношения в объектную идиому.

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

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

Статья Википедии *1008* на эту тему, по-видимому, размышляет о некоторых причинах, по которым объектная парадигма особенно подвержена этому несоответствию.

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

3 голосов
/ 02 сентября 2010

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

  1. Записи в объектах.
  2. Ваш язык запросов SQL.

Хотя первое несоответствие импеданса может не работать для всех языков, отличных от ООП, второе применимо ко всем языкам и может быть решено с использованием DSL , как показано здесь

3 голосов
/ 02 сентября 2010

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

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

...