6

我正在 PHP 和 MySQL 中创建一个多用户/公司 Web 应用程序。我很想知道关于构建我的数据库的最佳实践是什么。

这个网络应用程序将有数百家公司和数千名用户,因此它需要强大。每家公司都无法看到其他公司的数据,只能看到自己的数据。我们将主要存储文本数据,每个公司可能只有几 MB。

目前该数据库包含 14 个表(针对一个示例公司)。

将所有公司及其用户的数据放在一个数据库中并为每个公司创建一个唯一的 companyID 是否更好?

或者:

将每个公司的数据放在自己的数据库中并为我添加的每个新公司创建一个新的数据库和表集会更好吗?

每种方法的优缺点是什么?

谢谢,

斯蒂芬

4

4 回答 4

7

如果所有不同的公司都在使用单个 Web 应用程序,除非您有非常特殊的需要或理由使用单独的数据库(听起来不像您这样做),那么您绝对应该使用单个数据库。

您的应用程序将负责仅向正确的经过身份验证的用户显示正确的信息。

于 2009-12-16T00:01:18.840 回答
3

维护多个数据库将是一场噩梦。对于每个新公司,您都必须创建和管理每个新公司。如果您对一个架构进行更改,则必须对 14 岁以上的人进行更改。

只要您使用的是真正的数据库而不是 Access 或类似的愚蠢的东西,成千上万的用户和成千上万的应用程序根本不会造成问题。

于 2009-12-17T07:21:47.580 回答
3

多租户

优点

  • 相对容易开发:只需在一处更改数据库代码。
  • 让您轻松创建使用多个租户数据的查询。
  • 直接添加新租户:无需更改代码。
  • 如果您需要更改设计,将多租户转换为单租户设置很容易。

缺点

  • 如果编码马虎,租户之间的数据泄露风险。在某些情况下,可以使用租户视图过滤器来降低这种风险。该方法基于对不同租户使用不同的数据库用户帐户。
  • 如果您破坏代码,所有租户都将受到影响。

单租户

优点

  • 如果您对不同租户有非常不同的要求,那么几种不同的数据库模型可能会有所帮助。这是使用单租户设置的最佳情况。
  • 如果您的代码草率,则租户之间几乎没有数据泄漏的风险(租户A将无法访问租户B的数据)。此外,如果您通过拙劣的更新意外破坏了一个租户的架构,其他租户将不受影响。
  • 当您不需要在查询中考虑租户 ID 值时,更少的 SQL 代码

缺点

  • 数据库模式往往会随着时间的推移而有所不同,这通常会导致一场噩梦。使用数据库比较工具可以缓解此问题,但可能需要比较许多模式。
  • 在一个查询中包含来自多个数据库的数据通常很复杂,并且通常需要准备好的语句。
  • 开发很困难,因为您需要对多个模式进行相同的更改。
  • 同一个数据库实体可以出现在多个ID不同的数据库中,造成混淆。
  • 如果您需要更改设计,将单租户转换为多租户设置非常困难。
于 2014-10-31T14:36:49.980 回答
2

单个数据库是关系方式。从这个角度来看,一个方面是数据库收集有关数据库使用情况的统计信息并大量使用它。如果你把事情分开,你会在脚下开枪,因为统计数据会分散。

于 2009-12-16T00:15:22.530 回答