我应该将数据分散到多个数据库中还是保留在单个数据库中?

6
我正在使用PHP和MySQL创建一个多用户/公司的Web应用程序。我想知道在数据库结构方面最佳实践是什么。
由于将有数百个公司和数千个用户使用此Web应用程序,因此需要确保其健壮性。每个公司只能看到自己的数据,而无法查看其他公司的数据。我们主要存储文本数据,每个公司可能只有几MB的数据。
目前,数据库包含14个表(针对一个示例公司)。
是将所有公司和用户的数据放入单个数据库中,并为每个公司创建唯一的companyID,还是将每个公司的数据放入其自己的数据库中,并为每个新公司添加一个新的数据库和表集?
每种方法的优缺点是什么?
谢谢,
Stephen

重复:http://stackoverflow.com/questions/1580540/max-tables-design-pattern - OMG Ponies
抱歉,我的搜索中没有找到这个内容,可能使用了错误的搜索词。 - salonMonsters
4个回答

7

如果所有不同的公司都使用单个Web应用程序,除非您有非常特定的需要或理由使用单独的数据库(听起来似乎并没有),否则您应该绝对使用单个数据库。

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


谢谢philfreo。这是我们认为最有意义的路线,但我们想确保我们没有走错路。 - salonMonsters
1
在创建您的DDL时,请确保在公司和用户ID数据方面保持一致。您可能希望在所有表中将主键(例如company_id)设置为相同。 - O. Jones

3

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

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


3

多租户

优点

  • 相对容易开发:只需在一个地方更改数据库代码。
  • 允许您轻松创建使用多个租户数据的查询。
  • 添加新租户很简单:不需要更改任何代码。
  • 如果需要更改设计,将多租户转换为单租户设置很容易。

缺点

  • 如果编码粗糙,则存在租户之间数据泄漏的风险。可以使用租户视图过滤器来减少此风险。该方法基于为不同租户使用不同的数据库用户帐户。
  • 如果代码出现问题,则所有租户都会受到影响。

单租户

优点

  • 如果不同租户有非常不同的要求,则使用多个数据库模型可能会有益。这是使用单租户设置的最佳情况。
  • 如果编码粗糙,则实际上不存在租户之间数据泄漏的风险(租户A将无法访问租户B的数据)。此外,如果您通过错误的更新破坏了一个租户的模式,则其他租户将不受影响。
  • 在查询中不需要考虑租户ID值时,SQL代码较少

缺点

  • 数据库模式往往随着时间而不同,经常导致问题。使用数据库比较工具可以缓解此问题,但可能需要比较许多模式。
  • 通常很难在一个查询中包含来自多个数据库的数据,并且经常需要准备语句。
  • 开发很困难,因为您需要对多个模式进行相同的更改。
  • 相同的数据库实体可能会出现在许多具有不同ID键的数据库中,从而导致混乱。
  • 如果需要更改设计,则将单租户转换为多租户设置非常困难。

2

一个数据库是关系型的。从这个角度来看,一个方面是数据库收集有关数据库使用情况的统计信息,并且大量使用这些信息。如果您将事物分开,那么您将自食其果,因为统计信息将被分割。


谢谢提供有关收集统计信息的信息。这很有道理,会很有用。 - salonMonsters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接