需要更新我的单用户app数据库以允许多个用户,如何修改数据库架构?

Roe*_*and 1 php mysql database database-design

我为不久前经营飞盘联盟的本地团队构建了一个应用程序.我想要构建它,并使其成为我可以提供给其他组的东西.

Jist:人们报名参加比赛,app创建团队,app创建时间表,每个团队都有管理员可以管理他们的联赛

问题是,我有一个数据库,它最初设置为只处理一个组的联赛.我将如何重新设计架构,以允许多个组能够登录并仅修改自己的联赛.

我的想法是创建一个"帐户"表,并将"account_id"添加到每个表中.这是一个好方法吗?我已经附加了架构,所以你应该能够看到我到目前为止的内容!

注意:我在Codeigniter(php)和MySQL中构建它.

在此输入图像描述

Mik*_*ll' 5

多个客户; 一个托管应用程序 您正在描述多租户数据库.

构建多租户数据库时,需要考虑

  • 查询
  • 成本
  • 数据隔离和保护
  • 维护,和
  • 灾难恢复.

多租户解决方案的范围从每个租户一个数据库(无共享)到每个租户一行(共享所有内容).

"无共享","单独的数据库"或每个租户一个数据库

  • 每个客户最贵.(大量客户意味着大量服务器.)
  • 最高程度的数据隔离.
  • 单个租户的灾难恢复简单明了.
  • 维护在理论上更难,因为需要在每个数据库中进行更改.但是您的dbms可能很容易支持在每个数据库中运行存储过程.(SQL Server有一个未记录的系统存储过程,例如sp_msforeachdb.您可以自己编写.)"无共享"也是最容易定制的,但这也会引发更多的维护问题.
  • 每个表的最小行数.查询速度接近最佳.

"共享一切",或"共享架构",或"每个星球一个数据库"

  • 每个租户最便宜.
  • 最低程度的数据隔离.每个表都有一列,用于标识行所属的租户.由于租户行在每个表中混合,因此意外暴露其他租户的数据相对简单.
  • 单个租户的灾难恢复相对复杂; 您必须在许多表中恢复单个行.
  • 考虑到所有租户共享表格,结构维护更简单.但是,它会增加通信负载,因为您必须与每个租户进行通信并协调每个更改.它不容易定制.
  • 每个表的最大行数.快速查询更难,但这取决于有多少租户和多少行.您可以轻松地进入VLDB领域.

在"无共享"和"共享一切"之间是"共享模式".

"共享架构"

  • 租户共享一个数据库,但每个租户都有自己的命名模式.成本介于"无共享"和"共享一切"之间; 大型系统通常比"无共享"需要更少的服务器,比"共享所有内容"更多的服务器.
  • 比"分享一切"更好的隔离.没有"无所谓"的隔离.(您可以对模式进行GRANT和REVOKE权限.)
  • 单个租户的灾难恢复需要恢复许多模式中的一个.这要么相对容易,要么相当困难,具体取决于你的dbms.
  • 维护比"无共享"更容易; 不像"分享一切"那么容易.编写将在数据库中的每个模式中执行的存储过程相对简单.在租户之间共享公共表比在"无共享"中更容易.
  • 通常每个服务器的活动租户比"无共享"更活跃,这意味着它们共享(降级)更多资源.但没有"分享一切"那么糟糕.

微软有一篇关于多租户架构的文章,内容更详细.(该链接仅适用于多页文档的一页.)