我有一个网络应用程序,公司可以在其中注册他们的公司并使用一组功能。但是,假设 company 1
和 company 2
已注册。他们仍在访问同一个网站。现在,在共享信息等方面,这些公司中的每一个都 100% 相互独立。他们唯一可能共享的是用户/员工。
现在我的问题真的是,如果这些公司中的每一个都想insert
,那么最佳实践是什么? , select
, update
和 deleted
每天大约 1 万行,每行。
它可以是项目处理、小时列表等所有内容。所有这些都被分成不同的表。
最好的做法是拥有独立的数据库,还是对所有公司使用相同的数据库,并通过 company_id
来识别它们? ?
另外请记住,网络应用程序必须能够轻松适应超过 10 家公司。
最佳答案
您可以选择以下两种方式之一:
- 将
companyId
列添加到您的表中, - 为每个公司创建一个单独的数据库。
选项 1:
此选项是最动态的选项。您可以通过将正确的 companyId
标识符添加到查询的 where
子句来保持数据分离。
这种方法适用于:
- 您预计会有大量客户,
- 您希望您的客户数量定期增加和减少,
- 您不需要与您的客户共享您的数据库访问权限(他们只能通过您的 API/GUI 访问它)。
选项 2:
此选项提供更好的数据分离。您将每个客户的数据保存在他们自己的数据库模式的专用实例中。此选项允许您将访问控制负担卸载到数据库服务器,而不必在您的应用程序逻辑中强制执行它(这更容易出错)。
但是,也有一些缺点:每当有新客户出现时,您都需要为他们创建一个新的数据库实例,这意味着拥有一个具有创建数据库和授予权限的用户,这并不是每个系统管理员都会过分高兴的.
另一个问题是,每当数据库结构发生变化时,您都需要将机会应用到数据库的每个实例。
此选项的好处是,您可以将数据库的备份副本提供给客户,让他们在需要时直接访问数据库服务器,或者,以更有限的形式,您可以给他们一份副本数据库结构,无需过滤掉 customerId
列(与上面的选项 1 一样)。
总结:
没有 Elixir ,这完全取决于您的用例。 选项 1 更灵活,选项 2 提供更好的数据分离和更轻松的访问管理。
关于php - 为允许独立配置文件的 Web 应用程序使用多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643578/