Как создать настраиваемую пользователем базу данных (как создатель Zoho) в направляющих?

Я изучаю направляющие, и цель моих экспериментов состоит в том, чтобы понять что-то подобное Создателю Zoho, Flexlist или Mytaskhelper, т.е. приложению, где пользователь может создать свою собственную схему базы данных и представления. Что лучшая стратегия состоит в том, чтобы преследовать это?

Я видел что-то о Значении атрибута объекта (EAV), но я не уверен, является ли это лучшей стратегией или если существует некоторая поддержка в направляющих для него.

Если бы было какое-либо учебное руководство в направляющих о подобном проекте, то это было бы большим.

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

9
задан Felix 25 April 2019 в 10:01
поделиться

5 ответов

Лучше всего выбрать MongoDB. Его легко изучить (поскольку языком запросов является JavaScript), и он предоставляет хранилище данных без схемы. Я бы создал документ для каждой формы, который определяет структуру формы. Затем, когда пользователь отправляет данные, вы можете поместить их в общую структуру и сохранить их в коллекции на основе имени формы. Коллекции в MongoDB похожи на таблицы, но вы можете создавать их на лету. Вы также можете создавать индексы "на лету" для ускорения поиска.

Проблема, которую вы пытаетесь решить, является одним из основных вариантов использования документно-ориентированных баз данных, которыми является MongoDB. Есть несколько других баз данных, ориентированных на документы, но, на мой взгляд, у MongoDB лучший API на данный момент.

Прочтите руководство по MongoDB Ruby , и я уверен, что вы захотите попробовать.

НЕ используйте для этого реляционную базу данных. Создание таблиц на лету будет неприятным занятием и представляет угрозу безопасности не только для вашей системы, но и для данных ваших пользователей. Вы можете избежать создания таблиц на лету, создав сложную схему, которая отслеживает структуры формы, и для каждого типа поля потребуется собственная таблица. Rails делает это менее болезненным с помощью полиморфных ассоциаций, но это определенно некрасиво.

10
ответ дан 4 December 2019 в 21:09
поделиться

Должна быть возможность генерировать таблицы базы данных, посылая DDL-заявки непосредственно на сервер или динамически генерируя миграцию. Затем вы можете генерировать соответствующие модели ActiveRecord, используя Class.new(ActiveRecord::Base) do ... end. В принципе, это должно работать, но это должно быть сделано с некоторой осторожностью. Но это точно не работа для новичка.

Вторым решением может быть использование MongoMapper и MongoDB. Моя идея состоит в том, чтобы использовать коллекцию для хранения строк вашей таблицы, а поскольку MongoDB не содержит схем, вы можете просто добавить атрибуты.

0
ответ дан 4 December 2019 в 21:09
поделиться

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

В качестве альтернативы вы можете сохранить свои данные в XML и сгенерировать XML-схему для проверки.

Все «общие» решения будут иметь проблемы с внешними ключами или другими ограничениями, если вы не выполните всю эту проверку в памяти перед сохранением.

0
ответ дан 4 December 2019 в 21:09
поделиться

Я думаю, это не совсем то, что вам нужно, но это http://github.com/LeonB/has_magic_columns_fork , но, видимо, это действительно так что-то подобное, и у вас может появиться идея, чтобы начать работу.

0
ответ дан 4 December 2019 в 21:09
поделиться

Использование хранилища документов, такого как mongodb или couchdb, было бы лучшим выходом, поскольку они не содержат схемы.

0
ответ дан 4 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: