【问题标题】:How to create a user customizable database (like Zoho creator) in Rails?如何在 Rails 中创建用户可自定义的数据库(如 Zoho creator)?
【发布时间】:2011-02-06 00:27:25
【问题描述】:

我正在学习 Rails,我的实验目标是实现类似于 Zoho Creator、Flexlist 或 Mytaskhelper 的东西,即用户可以创建自己的数据库架构和视图的应用程序。实现这一目标的最佳策略是什么?

我看到了一些关于 Entity-Attribute-Value (EAV) 的内容,但我不确定它是否是最佳策略,或者 Rails 是否支持它。

如果 Rails 中有任何关于类似项目的教程,那就太好了。

可能它不是学习一门新语言和框架的最简单的明星,但这是我很久以来真正计划做的事情。

【问题讨论】:

    标签: ruby-on-rails database schema


    【解决方案1】:

    您最好的选择是 MongoDB。它易于学习(因为查询语言是 JavaScript)并且它提供了无模式的数据存储。我将为定义表单结构的每个表单创建一个文档。然后,每当用户提交数据时,您可以将数据放入通用结构中,并根据表单名称将其存储在集合中。在 MongoDB 中,集合就像表,但您可以动态创建它们。您还可以动态创建索引以加快搜索速度。

    您要解决的问题是 MongoDB 是面向文档的数据库的主要用例之一。还有其他几个面向文档的数据库,但我认为 MongoDB 目前拥有最好的 API。

    阅读MongoDB Ruby tutorial,我相信您会想尝试一下。

    不要使用关系数据库来执行此操作。动态创建表将是痛苦的,并且是一种安全隐患,不仅对您的系统,而且对您的用户数据也是如此。您可以通过创建跟踪表单结构的复杂模式来避免动态创建表,并且每个字段类型都需要自己的表。 Rails 通过多态关联减轻了这方面的痛苦,但它肯定不是很好。

    【讨论】:

      【解决方案2】:

      我认为这不是你想要的,但这个 http://github.com/LeonB/has_magic_columns_fork 但显然它做了类似的事情,你可能会有一些开始的想法。

      【讨论】:

        【解决方案3】:

        使用像 mongodb 或 couchdb 这样的文档存储是最好的方法,因为它们是无模式的。

        【讨论】:

          【解决方案4】:

          应该可以通过将 DDL 语句直接发送到服务器或通过动态生成迁移来生成数据库表。然后您可以使用 Class.new(ActiveRecord::Base) do ... end 生成相应的 ActiveRecord 模型。原则上这应该可行,但必须小心谨慎。但这绝对不是初学者的工作。

          第二种解决方案是使用MongoMapperMongoDB。我的想法是使用集合来存储表的行,并且由于 MongoDB 是少模式,因此您可以简单地添加属性。

          【讨论】:

            【解决方案5】:

            使用 EntryAttributeValue 允许您将任何模式数据存储在一定数量的表中,但是这带来的性能影响和维护问题很可能不值得。

            或者,您可以将数据存储在 XML 中并生成 XML 模式以进行验证。

            所有“通用”解决方案都存在外键或其他约束问题,除非您在存储之前在内存中进行所有验证。

            【讨论】:

              猜你喜欢
              • 2015-03-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-14
              • 2021-06-06
              • 2022-01-15
              • 1970-01-01
              相关资源
              最近更新 更多