我有一个Web应用程序,公司可以在其中注册公司并使用一组功能。但是,我们可以说company 1
和company 2
已注册。他们仍然访问同一个网站。现在,每个公司在共享信息等方面都是100%独立的。他们可能分享的唯一内容是用户/员工。
现在我的问题是,如果这些公司每天要insert
,select
,update
和deleted
每天大约10K行,那么最佳做法是什么,每个
它可以是项目处理,小时列表等所有内容。所有这些都分成不同的表格。
最佳做法是拥有独立的数据库,还是为所有公司使用相同的数据库,并通过company_id
识别它们?
另外请记住,Web应用程序必须能够轻松适应超过10家公司。
答案 0 :(得分:2)
你可以选择以下两种方式之一:
companyId
列
选项1:
此选项是最具动态性的选项。您可以通过在查询的companyId
子句中添加正确的where
标识符来保持数据分离。
这种方法适用于:
选项2:
此选项可以更好地分离数据。您将每个定制程序数据保存在自己的数据库模式的专用实例中。此选项允许您将访问控制负担卸载到数据库服务器,而不必在应用程序逻辑中强制执行(这更容易出错)。
但是,有一些缺点:每当新客户出现时,您需要为他们创建一个新的数据库实例,这意味着让用户拥有创建数据库和授予权限,这并不是每个系统管理员都会对此过于高兴。 。
另一个问题是,无论何时数据库结构发生变化,您都需要将机会应用于数据库的每个实例。
关于此选项的好处是,您可以将数据库的备份副本提供给客户,如果需要,可以直接访问数据库服务器,或者以更有限的形式,您可以为他们提供副本数据库结构,无需过滤掉customerId
列(如上面选项1 的情况)。
总结:
没有银弹,这一切都取决于你的用例。 选项1 更灵活,选项2 提供更好的数据分离和更轻松的访问管理。
答案 1 :(得分:0)
[1]保留单独的数据库,因为您的数据库有更多的DML操作。
[2]为统计管理,索引维护和备份/恢复保留非常好的数据库维护计划,否则在数据库崩溃时会出现性能问题或更多停机时间。