此SaaS的最佳数据库结构

时间:2015-10-03 22:30:34

标签: mysql database

我想开始用这篇文章进行头脑风暴......在问我的问题之前,让我进入这个场景:

我打算建立一个软件服务,它将是一个类似CRM的网络软件 因此,每个人都可以订阅该服务,并且作为登录用户,您可以拥有一个或多个联系人以及一个或多个员工(员工也可以登录)。

该软件以CONTACT为中心......每个联系人都可以拥有PROJECTS,DOCUMENTS等。

现在的问题: 为了构建一个安全且易于维护的软件,这次我正在考虑使用单独的数据库。您如何为每个订户设置专用数据库?

为什么我问这个问题? 嗯......该服务将有一个自定义版本。这意味着单个用户(已订阅该服务)可以拥有非常非常个性化的版本,此自定义将触及每个层:

  • 数据库结构
  • 模型类
  • 观点(这是简易部分)
  • 控制器

似乎它将是一个不同的应用程序。

我想保留一个主数据库,所有用户都可以登录...然后连接到他们的私人数据库。

我看到很多服务也使用个人登录页面,第三级域名,如:yourcompany.service.com

看看他们的网址,似乎他们使用这种方法,因为我们可以找到这样的东西:

yourcompany.service.com/contact/1

显示单个(第一个)联系人(ID为1)的详细信息页面。 似乎这是联系人表的第一条记录。

否则,我可以使用user_id保留一个数据库并控制所有内容。因此,例如,使用单个联系人表来存储ALLL ALLLLL我的用户的联系人......并仅在需要时编写自定义联系人。

我被困了......我曾经为一个应用程序使用过一个数据库,但是我想给出另一种方法的机会。

你有没有遇到过这个问题? 你会如何解决它?

2 个答案:

答案 0 :(得分:0)

大多数所有者操作的系统(与用户操作相对)使用多租户(多客户)数据库,而不是每个客户使用单独的数据库。这是因为在管理较少数据库实例的过程中存在显着的规模经济。 (换句话说,为每个客户管理一组单独的表是一个巨大且难以控制的痛苦。)

WordPress是两者的有趣例子。它们具有多站点系统,其中几个不同的用户共享数据库。他们在SaaS WordPress.com系统上使用它。它们还具有单个站点配置,个人用户可以自行管理。

答案 1 :(得分:0)

在Postgresql和其他许多其他数据库中你可以使用不同的模式,这允许一种孤立的SAAS方式

通常只使用主公共模式,但模式数量没有限制。换句话说,您可以为每个客户提供架构。

示例

www.example.com会看到公共架构/租户

mycustomername.example.com会看到public和mycustomername架构/租户

很多网站框架都内置了这个应用程序或作为第三方应用程序