хранить объекты в базе данных - PullRequest
3 голосов
/ 21 августа 2009

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

В настоящее время я использую mysql, и он хранится таким образом.

object_id|attribute_id|data

Есть несколько таких таблиц, разные таблицы имеют разные типы данных. Например, в таблице Integer хранятся только целые числа

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

Это единственный способ сделать это в mysql или других реляционных базах данных? Должен ли я попытаться найти другие модели базы данных для этой проблемы?

EDIT Я провел некоторое исследование, и мне кажется, что мне нужна документально-ориентированная база данных с мощью SQL.

Ответы [ 5 ]

5 голосов
/ 21 августа 2009

Если вы хотите использовать RDBMS -подобную документно-ориентированную базу данных, я думаю, вам следует изучить mongoDB :

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

5 голосов
/ 21 августа 2009

Я думаю, вы хотите исследовать область, называемую «объектно-реляционное отображение». Это большая область со многими решениями. Некоторые из них используются в каркасах, таких как "" ActiveRecord, используемый в Rails.

4 голосов
/ 21 августа 2009

Ваш дизайн называется Object-Attribute-Value (OAV). Это один из способов отображения объектов в реляционную базу данных. Это обычно очень медленно, но очень гибко. Если определения вашего класса постоянно меняются (или изменяются динамически), это может быть вашим единственным выбором.

Вы можете использовать Object-Relational-Mapping (ORM). Это еще один способ создания объектов в реляционной базе данных. Это намного быстрее и несколько менее гибко. Если определения вашего класса не меняются очень часто (и не меняются динамически), это гораздо лучший выбор.

0 голосов
/ 21 августа 2009

Альтернативой использованию ORM (что является очень хорошей идеей) является использование встроенной в язык функциональности сериализации (если она есть, в противном случае - библиотека) для преобразования объекта в байтовый буфер сохраните это в базе данных с подходящим ключом для поиска. Это очень хорошо работает с базами данных значения ключа, такими как memcached.

0 голосов
/ 21 августа 2009

Использование одной таблицы возможно и, вероятно, предпочтительнее. Иметь столбец таблицы для каждого из атрибутов всех типов объектов. Затем добавьте еще один столбец, чтобы указать «тип объекта». Вы можете получить все объекты одного типа из таблицы простым запросом строк с определенным именем типа объекта.

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