2012-04-16 50 views
0

我正在使用Ruby on Rails和设计进行身份验证。我有一个用户(客户)模型和一个商业模型。我希望用户(客户)通过特定业务注册并属于特定业务。一个企业有很多用户(客户),但一个用户只属于一个企业。我最终希望有企业能够使用他们自己的域的子域来对应他们自己的ID,但现在我已经到了这一点,我不知道如何处理这个问题..我应该/可以使用多个数据库吗?

老实说我仍然在读高中,我不知道如何将每件事物与这样的事情结合在一起。所以我正在计划将这个应用程序授权给企业(在我开发这个产品之前已经有一些已经付费的产品)。每个企业的数据都需要与其他企业分开。有些企业根本没有域名,所以我将不得不在服务器上使用子域名。有些企业确实有一个网站,所以我想通过他们的业务领域使用一个子域。

我现在认为使用多个数据库肯定会更好..老实说,我对数据库结构的知识非常有限。我相信有可能运行单独的个人应用程序,我一直认为这可能是最好的方式来推出这个。也许最容易开发/维护?

所以我的问题是什么是运行多个数据库与运行单独的个别应用程序的权衡?我在哪里可以找到更多关于如何实际执行此操作的信息?也有人可以让我进入正确的方向如何转发这些领域或我必须做的?

另请请评论,如果我的问题不够清楚......并对不起,这是如此漫长的大声笑。

回答

2

一旦你走上多个数据库的道路,你不能轻易回去,所以你最好有一个很好的理由去做。除非你有严重的扩展问题,否则最好尽可能延迟这个决定,而是使用标准关系来分割你的数据库。

Rails很容易做到这一点,因为您可以将范围应用于任何事情。例如,您创建一个业务模型,然后不是直接获取其他对象,而是始终在特定的上下文中执行此操作。在实践中,这看起来像:

@orders = @business.orders.paginated 

你可以让你所有的父类的“面向企业的”控制器后裔将使用一个before_filter所以在正确的@business模型加载,这并不一定是复制在许多不同的控制器中。

如果您确实想要拆分数据库,您可以通过根据business_id或其他派生关系分离表来实现。

我发现这个作品对于大多数应用程序都非常好,并且可以很好地扩展。请记住,缩放的第一步不是共享,而是复制,因为拥有大量只读副本可以大幅提高读取性能,而不会使应用程序在内部复杂化。

相关问题