php - 为允许独立配置文件的 Web 应用程序使用多个数据库

标签 php mysql database database-design pdo

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

现在我的问题真的是,如果这些公司中的每一个都想insert,那么最佳实践是什么? , select , updatedeleted每天大约 1 万行,每行。

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

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

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

最佳答案

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

  1. companyId 列添加到您的表中,
  2. 为每个公司创建一个单独的数据库。


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

这种方法适用于:

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


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

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

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


总结:
没有 Elixir ,这完全取决于您的用例。 选项 1 更灵活,选项 2 提供更好的数据分离和更轻松的访问管理。

关于php - 为允许独立配置文件的 Web 应用程序使用多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643578/

相关文章:

php - 如何在 Symfony 2 控制台命令中使用我的实体和实体管理器?

c# - 将图像保存到 MYSQL Blob 字段

database - 触发器与非规范化存储过程的优缺点

c++ - Mongo-C 驱动程序 (1.7.0-r2) 的 MongoDB 链接器错误

php - mysql 5.1.73加载数据本地infile错误

php - 测试特定元素节点中的字符串

php - 自定义排序数组

php - 在数据库中用foreach循环保存多维数组

java - XAMPP/java.net.BindException : Address already in use 问题

javascript - 使用 codeigniter 事件未显示在完整日历中?