ORM против сериализованного массива? - PullRequest
2 голосов
/ 22 февраля 2012

Я только изучаю ORM, и мне интересно ... если у вас есть объект (скажем, JSON ... и предположим, что он плотный, содержит вложенные объекты, имеет общее количество свойств, которые могут отличаться от объекта к объекту и т. д.) Какой аргумент против простого превращения его в сериализованный массив и сохранения его в таблице?

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

Если вы в конечном итоге планируете запросить у db объект для последующей обработки через код, что является недостатком для простой сериализации или использования какого-либо OODB? Что бы я получил, используя ORM?

1 Ответ

0 голосов
/ 22 февраля 2012

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

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

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

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

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

Короче говоря, ORM являются ответом на проблему, существовавшую с тех пор, как мечталось об объектно-ориентированном программировании - не беспокойтесь об этом и используйте их, если вы не уверены, что ваши структуры данных / схемы жесткие и разумные в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...