我们正在saas模型中使用php和mysql开发项目,每个租户都可以使用我们的模块创建者和表单生成器为自己创建模块。
当他们动态创建新模块时,我们将为特定租户创建新表。所以每个租户都有不同的模式。
我建议使用每个租户的每个数据库,但我的经理希望将所有租户都保存在单个数据库中,因为我们已经继续升级我们的项目。
现在我的想法是每个租户有2个db;一个是master db,它是所有租户的公共数据库,另一个是secondary db,它是每个人的表创建所用的数据库。
最佳答案
有多种方法可以设计多租户应用程序
1)单一数据库,单一代码库
使用单个数据库并将所有客户端数据存储在单个数据库中。必须在所有表中添加类似“clientid”的字段,并修改所有sql查询以选择正确的“clientid”。如果您已经有了一个租户应用程序,则需要在代码中进行大量修改。
优点:易于管理数据库和更新;无重复。
缺点:如果在sql查询中漏掉了一个“clientid”,则可能会导致另一个客户端出现问题。
2)多数据库,单代码库
为每个客户机创建一个单独的数据库。不需要修改现有的单租户代码库。您只需修改配置文件即可根据客户机选择数据库。
优点:很少修改代码库,很容易确保客户端数据不会混合。
缺点:要管理多个数据库,因此在数据库架构更新时,必须更新每个数据库。
3)多数据库、多代码库
创建一个单独的数据库&为每个客户机复制完整的代码。完全不需要修改。
优点:无需修改代码库,易于确保客户端数据不会混合,易于执行特定于客户端的修改。
缺点:要管理多个数据库/代码,因此在数据库架构/代码更新时,必须为每个客户端手动更新。
所以现在您可以决定哪些选项最适合您的项目需求。