将多个数据库用于允许独立配置文件的Web应用程序

时间:2016-06-05 15:29:31

标签: php mysql database database-design pdo

我有一个Web应用程序,公司可以在其中注册公司并使用一组功能。但是,我们可以说company 1company 2已注册。他们仍然访问同一个网站。现在,每个公司在共享信息等方面都是100%独立的。他们可能分享的唯一内容是用户/员工

现在我的问题是,如果这些公司每天要insertselectupdatedeleted每天大约10K行,那么最佳做法是什么,每个

它可以是项目处理,小时列表等所有内容。所有这些都分成不同的表格。

最佳做法是拥有独立的数据库,还是为所有公司使用相同的数据库,并通过company_id识别它们?

另外请记住,Web应用程序必须能够轻松适应超过10家公司。

2 个答案:

答案 0 :(得分:2)

你可以选择以下两种方式之一:

  1. 在表格中添加companyId
  2. 为每家公司创建一个单独的数据库。

  3. 选项1:
    此选项是最具动态性的选项。您可以通过在查询的companyId子句中添加正确的where标识符来保持数据分离。

    这种方法适用于:

    • 您期望有大量客户,
    • 您希望您的客户数量定期增加或减少,
    • 需要与您的客户共享您的数据库访问权限(他们只能通过您的API / GUI访问它)。


    选项2:
    此选项可以更好地分离数据。您将每个定制程序数据保存在自己的数据库模式的专用实例中。此选项允许您将访问控制负担卸载到数据库服务器,而不必在应用程序逻辑中强制执行(这更容易出错)。

    但是,有一些缺点:每当新客户出现时,您需要为他们创建一个新的数据库实例,这意味着让用户拥有创建数据库和授予权限,这并不是每个系统管理员都会对此过于高兴。 。
    另一个问题是,无论何时数据库结构发生变化,您都需要将机会应用于数据库的每个实例。

    关于此选项的好处是,您可以将数据库的备份副本提供给客户,如果需要,可以直接访问数据库服务器,或者以更有限的形式,您可以为他们提供副本数据库结构,无需过滤掉customerId列(如上面选项1 的情况)。


    总结:
    没有银弹,这一切都取决于你的用例。 选项1 更灵活,选项2 提供更好的数据分离和更轻松的访问管理。

答案 1 :(得分:0)

[1]保留单独的数据库,因为您的数据库有更多的DML操作。

[2]为统计管理,索引维护和备份/恢复保留非常好的数据库维护计划,否则在数据库崩溃时会出现性能问题或更多停机时间。