【发布时间】:2011-10-23 14:23:50
【问题描述】:
我最初为一个客户编写了我的 Ruby on Rails 应用程序。现在,我正在更改它,以便它可以用于不同的客户。我的最终目标是某些用户(不是我)可以单击一个按钮并创建一个新项目。然后生成所有必要的更改(新模式、新表、代码处理),而无需我编辑 database.yml 文件或添加新模式定义。我目前正在使用 SCOPED 访问权限。所以我有一个项目模型,其他关联模型有一个 project_id 列。
我查看了有关 Rails 中的多租户应用程序的其他帖子。很多人似乎建议在 Postgres 中为每个新客户端创建不同的模式。然而,对我来说,新客户在数据模型方面拥有不同的模式并没有多大用处。每个客户端将拥有相同的表、行、列等。
我对每个客户的愿景是,我的生产数据库首先有一个包含不同项目/客户的表。这些表中的每一个都链接到一组表,这些表几乎相同,但数据不同。换句话说,一张桌子。或者换句话说,第一个表将映射到具有相同结构的每个客户端的不同数据集。
我解释我的愿景的方式是否与 Postgres 实现不同“模式”的方式完全相似?它看起来像嵌套表吗?还是 Postgres 必须查询数据库中的所有信息?我目前不使用 Postgres,但我愿意学习它是否适合设计。如果您知道适合我需要的与 Rails 配合使用的数据库软件,请告诉我。
现在,我正在使用作用域来完成多租户应用程序,但感觉它不是可扩展的或干净的。但是,如果我向他们提供可填写的信息,它确实使非技术用户可以很容易地创建一个新项目。您知道多模式 Postgres 定义是否可以在用户单击按钮后自动运行?如果可能的话,我希望这由 Rails 处理,而不是由外部脚本处理? (请务必建议)
最重要的是,您是否推荐任何插件或者我应该为此任务采用不同的框架?我发现 Rails 在上述某些抽象情况下受到限制,这是我第一次遇到 Rails 扩展问题。
欢迎任何与多租户应用程序或我的情况相关的建议。也欢迎任何需要澄清或额外建议的问题。
谢谢, --戴夫
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 database-design postgresql multi-tenant