php - 需要 Multi-Tenancy 数据库架构的建议?

标签 php mysql database database-design database-schema

我们正在 SaaS 模型中使用 PHP 和 MySQL 开发项目,每个租户都可以选择使用我们的 Module Creator 和 Form Builder 创建自己的模块。

当他们动态创建新模块时,我们正在为特定租户创建新表。所以每个租户都有不同的模式。

我建议使用每个租户的每个数据库,但我的经理希望将所有租户保留在单个数据库中,因为我们在继续升级我们的项目。

现在我的想法是为每个租户分配 2 个数据库;一个是 Master DB,它是所有租户共有的,下一个是 secondary DB,它用于每个人的表创建。

最佳答案

可以通过多种方式设计 Multi-Tenancy 应用

1) 单一数据库,单一代码库

使用单一数据库并将所有客户数据存储在单一数据库中。您必须在所有表中添加一个字段,如“clientid”,并修改所有 SQL 查询以选择正确的“clientid”。如果您已经有一个单租户应用程序,则需要对代码进行大量修改。

优点:易于管理数据库和更新;没有重复。 缺点:如果您在 SQL 查询中遗漏了“clientid”,则可能会导致另一个客户端出现问题。

2)多数据库,单一代码库

为每个客户创建一个单独的数据库。无需修改现有的单租户代码库。您只需修改配置文件以根据客户端选择数据库。

优点:代码库修改很少,容易保证客户端数据不混淆。 缺点:需要管理多个数据库,因此在更新数据库模式时,您将不得不更新每个数据库。

3)多数据库,多代码库

创建一个单独的数据库并为每个客户复制完整的代码。完全不需要修改。

优点:无需修改代码库,易于确保客户端数据不会混淆,易于执行客户端特定的修改。 缺点:需要管理多个数据库/代码,因此在数据库模式/代码更新时,您将不得不为每个客户端手动更新。

现在您可以决定哪些选项最适合您的项目要求。

关于php - 需要 Multi-Tenancy 数据库架构的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20703988/

相关文章:

php - 解析错误 : syntax error, unexpected T_ELSE, expecting T_FUNCTION in/home/petit/public_html/system/database/mysqli.php on line 54

php - 更新同一个ID的三张图片的逻辑是什么?

php - Ubuntu 12.10 上的 PHP MySQL 问题

javascript - 如何使用 sequelize 从 2 个表中查询信息

c# - 连接到 .NET 中嵌入了 C# 的 Firebird 3 时出现问题

php - Where 子句中的数组

javascript - 我正在尝试将一些表单数据从一个 html 页面传递到另一个

php - 访问被拒绝,但凭据正确

php - 从后台文件恢复MySQL数据库

php - 来自 json 对象的快速 PUT API