Не существует ли способа представить объект, чтобы его можно было понять в реляционной базе данных?
Вы упустили смысл моих заявлений. Я не имел в виду, что нельзя хранить объект в реляционной базе данных. Я имел в виду, что парадигма ОО предполагает, что у вас есть экземпляр этого объекта в пространстве приложения . То есть вы можете вызывать методы и обращаться к свойствам объекта:
$bug->status = 'CLOSED';
$bug->save();
Но в любом ORM, который я видел *, вы не можете оперировать экземпляром объекта без предварительного извлечения его из базы данных. Вы также не можете оперировать целыми наборами строк одновременно, как в SQL.
Было бы интересно увидеть пакет ORM, который имел тип объекта, сопоставленный с набором данных. Затем, когда вы меняете атрибут, он применяется ко всем строкам в этом наборе. Я не видел ни одной попытки ORM сделать это.
Это было бы очень сложно из-за проблем параллелизма. Включает ли набор строки, которые были в этом наборе при создании экземпляра объекта, или при выполнении изменения, или при сохранении изменений? Если он поддерживает все эти перестановки в качестве параметров, он становится настолько сложным в использовании, что можно справедливо подумать, что он не представляет реального улучшения по сравнению с непосредственным использованием SQL.
Ваш комментарий: Нельзя сказать, что наборы и объекты несовместимы. Набор может быть объектом (в Java даже есть классы для Collection и Set). Но парадигма ОО предполагает, что операции применяются к одному экземпляру объекта, тогда как реляционные операторы всегда применяются к наборам (набор из одной строки все еще является набором). И на самом деле существующие в настоящее время пакеты ORM предполагают, что можно изменить только один экземпляр строки за раз, и вы должны были выбрать эту строку, прежде чем сможете ее изменить.
Теоретически возможно расширить возможности ORM для работы на съемочных площадках - но AFAIK никто не пытался сделать это. Я утверждаю, что ORM, который может сделать все того, что могут сделать реляционные операторы, будет намного хуже, чем SQL.
* Я исключаю SQL-подобные псевдоязыки, такие как HQL, которые являются частью пакета ORM (Hibernate в случае HQL), но сам этот псевдоязык не может рассматриваться как ORM. 1030 *