Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要更新我的单用户应用程序数据库以允许多个用户,如何修改数据库架构?_Php_Mysql_Database_Database Design - Fatal编程技术网

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

Php 需要更新我的单用户应用程序数据库以允许多个用户,如何修改数据库架构?,php,mysql,database,database-design,Php,Mysql,Database,Database Design,不久前,我为一个经营飞盘联盟的本地团体开发了一个应用程序。我想把它建立起来,让它成为我可以提供给其他团体的东西 Jist:人们注册参加比赛,应用程序创建团队,应用程序创建时间表,每个小组都有管理员可以管理他们的联赛 问题是,我有一个数据库,它最初只用于处理一个小组的联赛。我将如何重新设计模式,以允许多个组能够登录并仅修改他们自己的联盟 我的想法是创建一个account表,并将account_id固定到每个表中。这是一个好方法吗?我已经附加了模式,所以您应该能够看到我到目前为止所做的 注意:我是在

不久前,我为一个经营飞盘联盟的本地团体开发了一个应用程序。我想把它建立起来,让它成为我可以提供给其他团体的东西

Jist:人们注册参加比赛,应用程序创建团队,应用程序创建时间表,每个小组都有管理员可以管理他们的联赛

问题是,我有一个数据库,它最初只用于处理一个小组的联赛。我将如何重新设计模式,以允许多个组能够登录并仅修改他们自己的联盟

我的想法是创建一个account表,并将account_id固定到每个表中。这是一个好方法吗?我已经附加了模式,所以您应该能够看到我到目前为止所做的

注意:我是在Codeigniter php和MySQL中构建的


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

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

质疑 费用 数据隔离和保护 维护,以及 灾难恢复。 多租户解决方案的范围从每个租户一个数据库不共享任何内容到每个租户一行共享所有内容

不共享、单独数据库或每个租户一个数据库

每个客户最贵。大量的客户端意味着大量的服务器。 最高程度的数据隔离。 针对单个租户的灾难恢复简单明了。 从理论上讲,维护比较困难,因为每个数据库都需要进行更改。但是,您的dbms可能很容易支持在每个数据库中运行存储过程。SQL Server有一个未记录的系统存储过程,例如sp_msforeachdb。你可以自己写。无共享也是最容易定制的,但这也会带来更多的维护问题。 每个表的最低行数。查询速度接近最优。 共享一切,或共享模式,或每个星球一个数据库

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

共享模式

租户共享一个数据库,但每个租户都有自己的命名模式。成本介于“不共享”和“共享一切”之间;大型系统通常需要更少的服务器,而不是什么都不共享,需要更多的服务器。 隔离比分享一切要好得多。与其说是与世隔绝,不如说什么都不分享。您可以授予和撤销对架构的权限。 单个租户的灾难恢复需要恢复多个架构之一。这要么相对容易,要么相当困难,这取决于您的dbms。 维护比不共享更容易;不像分享一切那么容易。编写将在数据库中的每个模式中执行的存储过程相对简单。在租户之间共享公共表比不共享更容易。 通常每台服务器上的活跃租户比不共享的租户多,这意味着他们共享更多的资源。但没有分享一切那么糟糕。
微软有一篇关于更多细节的好文章。链接仅指向多页文档的一页

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

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

质疑 费用 数据隔离和保护 维护,以及 灾难恢复。 多租户解决方案的范围从每个租户一个数据库不共享任何内容到每个租户一行共享所有内容

不共享、单独数据库或每个租户一个数据库

每个客户最贵。大量的客户端意味着大量的服务器。 最高程度的数据隔离。 针对单个租户的灾难恢复简单明了。 从理论上讲,维护比较困难,因为每个数据库都需要进行更改。但是,您的dbms可能很容易支持在每个数据库中运行存储过程。SQL Server有一个未记录的系统存储过程,例如sp_msforeachdb。你可以自己写。无共享也是最容易定制的,但这也会带来更多的维护问题。 每个表的最低行数。查询速度接近最优。 共享一切,或共享模式,或每个星球一个数据库

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

共享模式

租户共享一个数据库,但每个租户都有自己的命名模式。成本介于“不共享”和“共享一切”之间;大型系统通常需要更少的服务器,而不是什么都不共享,需要更多的服务器。 隔离比分享一切要好得多。与其说是与世隔绝,不如说什么都不分享。您可以授予和撤销对架构的权限。 单个租户的灾难恢复需要恢复多个架构之一。这要么相对容易,要么相当困难,这取决于您的dbms。 维护比不共享更容易;不像分享一切那么容易。编写将在数据库中的每个模式中执行的存储过程相对简单。在租户之间共享公共表比不共享更容易。 通常每台服务器上的活跃租户比不共享的租户多,这意味着他们共享更多的资源。但没有分享一切那么糟糕。 微软有一篇关于更多细节的好文章。链接仅指向多页文档的一页