Какую модель базы данных следует использовать для динамического изменения сущностей/свойств во время выполнения?

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

Привилегированный пользователь должен иметь возможность

  • добавить новые типы объектов (, например «пользователь» или «семья»)
  • добавить новые свойства к типам сущностей (, например, «пол» к «пользователю»)
  • удалить/изменить объекты и свойства

Это будут обычные задачи для привилегированного пользователя. Делать он это будет через веб-интерфейс приложения. В конце концов, все данные должны быть доступны для поиска и сортировки всеми типами пользователей приложения. Меня беспокоят два вопроса:

a )Как данные должны храниться в базе данных? Должен ли я динамически добавлять/удалять таблицы и/или столбцы базы данных во время выполнения?

Я не эксперт по базам данных. Я застрял в воображении, что с точки зрения реляционных баз данных приложение должно иметь возможность динамически добавлять/удалять таблицы (, объекты )и/или свойства столбцов ()во время выполнения. И мне не нравится эта идея. Точно так же я думаю, следует ли обрабатывать такие динамические данные в базе данных NoSQL.

Во всяком случае, я считаю, что у такой проблемы есть разумное каноническое решение, которое я просто не нашел и не придумал до сих пор. Каков наилучший подход к такому виду динамического управления данными?

b )Как реализовать это на Python с помощью ORM или NoSQL?

Если вы рекомендуете использовать модель реляционной базы данных, я бы хотел использовать SQLAlchemy. Однако я не понимаю, как динамически создавать таблицы/столбцы с помощью ORM во время выполнения.Это одна из причин, почему я надеюсь, что существует гораздо лучший подход, чем создание таблиц и столбцов во время выполнения. Можно ли эффективно реализовать рекомендуемую модель базы данных с помощью SQLAlchemy?

Если вы рекомендуете использовать базу данных NoSQL, то какую? Мне нравится использовать Redis--можете ли вы представить себе эффективную реализацию на основе Redis?

Спасибо за ваши предложения!

Редактировать в ответ на некоторые комментарии:

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

По сути, пользователи будут искать данные через простую форму на веб-сайте. Они запрашивают, например. все экземпляры объекта E со свойством P, имеющим значение V выше, чем T. Результат можно отсортировать по значению любого свойства.

Наборы данных не станут слишком большими. Следовательно, я думаю, что даже самый глупый подход все равно приведет к работающей системе. Тем не менее, я энтузиаст, и я хотел бы применять современные и подходящие технологии, а также я хотел бы быть в курсе теоретических узких мест. Я хочу использовать этот проект, чтобы набраться опыта в разработке "Pythonic", состояния -из -художественного, масштабируемого и надежного веб-приложения -.

Я вижу, что первые комментарии, как правило, рекомендуют подход NoSQL. Хотя мне очень нравится Redis, похоже, было бы глупо не воспользоваться моделью Document/Collection Mongo/Couch. Я изучал mongodb и mongoengine для Python. Поступая так, делаю ли я шаги в правильном направлении?

Редактировать 2 в ответ на некоторые ответы/комментарии:

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

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

Говоря абстрактно, приложение должно управлять

  1. макет данных , то есть «динамический список» допустимых типов объектов и «динамический список» свойств для каждого допустимого типа объектов
  2. сами данные

Я ищу умный и эффективный способ реализовать это. Судя по вашим ответам, здесь лучше использовать NoSQL, что является еще одним важным выводом.

20
задан Jan-Philip Gehrcke 29 May 2012 в 13:26
поделиться