PHP Web Application:mysql 数据库设计最佳实践问题

2022-08-30 22:10:43

我目前正在与一位同事就我们正在创建的PHP Web应用程序的数据库设计的最佳实践进行辩论。该应用程序是为企业设计的,每个注册的公司都将有多个用户使用该应用程序。

我的设计方法是为每家注册的公司创建一个新的数据库。这样,一切都是沙盒,模块化和小巧的。我的同事理念是将每个人放入一个数据库中。他的论点是,如果我们有1000多家公司注册,我们最终会有1000多个数据库需要处理。更不用说做商业智能变得一团糟了。

例如,假设应用程序是一个订单输入系统。使用单独的数据库,即使每家公司每天执行 100 多个订单,表大小也可以保持可管理性。在单存储桶应用程序中,表可以很快变得非常大。

是否有最佳实践?我尝试过在网上打猎,但没有取得多大成功。欢迎链接、白皮书和演示文稿。

提前致谢,

The1Rob


答案 1

我与WordPress托管服务 wordpress.com 的数据库架构师进行了交谈。他说,他们从一个数据库开始,将所有客户托管在一起。毕竟,单个博客网站的内容实际上并不多。按理说,单个数据库更易于管理。

这对他们来说确实很有效,直到他们拥有成百上千的客户,他们意识到他们需要横向扩展,运行多个物理服务器并在每台服务器上托管一部分客户。当他们添加服务器时,很容易将单个客户迁移到新服务器,但很难在属于单个客户博客的单个数据库中分离数据。

随着客户来来去去,一些客户的博客有大量活动,而另一些则过时,在多个服务器上重新平衡成为一项更复杂的维护工作。监视每个数据库的大小和活动也更容易。

同样,执行数据库备份或还原包含 TB 级数据的单个数据库,而不是单个数据库备份和每个数据库几 MB 的还原,也是一个重要因素。考虑一下:一位客户打电话说他们的数据由于一些错误的数据输入而得到了SNAFU,你能从昨天的备份中恢复数据吗?如果所有客户共享一个数据库,您将如何还原一个客户的数据?

最终,他们决定将每个客户拆分为一个单独的数据库,尽管管理起来很复杂,但为他们提供了更大的灵活性,并且他们将托管服务重新构建为这种模型。

因此,虽然从数据建模的角度来看,将所有内容保存在单个数据库中似乎是正确的做法,但当您传递数据量的某个断点时,某些数据库管理任务变得更加容易。


答案 2

我永远不会为每个公司创建一个新的数据库。如果需要模块化设计,可以使用表和正确连接的主键和辅助键来创建此设计。这就是我了解数据库规范化的地方,我相信它会在这里帮助你。

这就是我会使用的方法。SQL 文章


推荐