我们正在使用PHP& amp;在SaaS模型中的MySQL,每个租户都可以选择使用我们的Module Creator和Form Builder为自己创建模块。
当他们动态创建新模块时,我们正在为特定租户创建新表。所以每个租户都有不同的架构。
我建议与每个租户的每个数据库一起使用,但我的经理希望将所有租户保留在单个数据库中,因为我们继续升级我们的项目。
现在我的想法是为每个租户提供2个数据库;一个是Master DB,它对所有租户都是通用的,下一个是辅助DB,它是为每个人创建的表。
答案 0 :(得分:6)
可以通过多种方式设计多租户应用
1)单个数据库,单个代码库
使用单个数据库并将所有客户端数据存储在单个数据库中。您必须在所有表中添加“clientid”字段,并修改所有SQL查询以选择正确的“clientid”。如果您已经有一个租户应用程序,则代码中需要进行大量修改。
优点:易于管理的数据库和更新;没有重复。 缺点:如果您错过了SQL查询中的“clientid”,则可能会导致另一个客户端出现问题。
2)多个数据库,单个代码库
为每个客户创建一个单独的数据库。您现有的单租户代码库无需修改。您只需修改配置文件以根据客户端选择数据库。
优点:极少的代码库修改,易于确保客户端数据不会混杂。 缺点:要管理多个数据库,因此在数据库架构更新时,您必须更新每个数据库。
3)多个数据库,多个代码库
创建一个单独的数据库&复制每个客户端的完整代码。根本不需要修改。
优点:无需修改代码库,轻松确保客户端数据不会混杂,易于执行客户端特定的修改。 缺点:需要管理多个数据库/代码,以便在数据库架构/代码更新时,您必须为每个客户端手动更新。
现在您可以决定哪种选项最适合您的项目要求。
答案 1 :(得分:0)
我会在单独的数据库中分隔租户的数据。这使得实现错误变得更加困难,以便一个租户可以意外地访问另一个租户的数据。据我所知,至少有一个国家(德国)存在数据隐私行为,需要在多租户系统中分离数据库模式。
对于迁移数据库,我建议使用像flywire这样的模型(好吧,那不是PHP,但这个概念非常简单,可以在PHP中重新实现而不需要付出很大的努力)。