php - 除了每个用户单独的数据库之外还有其他选择吗?

标签 php mysql multiple-databases

我正在开发一个应用程序,用户可以注册他们的公司并存储他们的所有信息;

  • 公司

    tax_registration_no, name, address, etc
    
  • 产品

    product_code, description, price, etc.
    
  • 部门

    department_code, name. 
    
  • 员工

    employee_id, username, password, address
    
  • 员工个人权限

    employee_can_access_till, employee_can_provide_discount, etc.
    
  • 客户

    name, address, orders
    

每家注册的公司都会收到一个模板电子表格文件,他们可以在其中复制数据并将其发送回我的客户进行存储。

我的客户希望在文件上传到网站时为每个公司生成一个单独的数据库,但我不相信这是一个明智的方法(而且这听起来像是一场维护噩梦)。如果我有多个数据库需要检查,诸如员工身份验证之类的事情将如何工作?

数据将存储在设备内部,因此只会一次性同步到服务器以获取数据,然后在更新时再次同步。

我最初的想法是将电子表格存储在服务器上,并在需要时解析并通过 JSON 将其发送到应用程序。这样,它就只是一个可以下载、修改和重新上传的文件。仅将员工(也许还有公司)存储在单个数据库中。

关于如何解决这个问题有什么建议吗?

最佳答案

您绝对不需要每个用户有一个单独的数据库。很难准确说出“用户”的含义,但听起来像是一家公司。

相反,只需在所有相应的表中包含 companyid 即可。从您的列表来看,这似乎是除了 individual_employee_permissions 表(您从 join 到员工)之外的所有表。

这是设计此类数据库的“正常”方法,它有很多优点。您可以轻松查询跨公司发生的事情——每个公司有多少员工?有多少客户?哪些员工拥有管理员权限?

另一个优势在于维护方面。如果您需要修复系统或添加功能,在单个数据库上比在多个数据库上完成要容易得多。同样,在一个数据库上备份和恢复系统是一个简单得多的过程。

将公司存储在单独的数据库中有几个原因。这些原因压倒了上述便利性。首先是每个系统是否都是为公司定制的系统。然后,可以独立于其他公司为一家公司添加功能。

第二个原因是安全限制是否要求数据不得与其他公司的数据存储在一起。这种情况有时会发生,但很少发生,这是有充分理由的。但这样的要求可能会要求每个公司使用单独的数据库甚至单独的服务器。

关于php - 除了每个用户单独的数据库之外还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966470/

相关文章:

transactions - EJB3 - 在事务中使用 2 个持久性单元(异常 : Local transaction already has 1 non-XA Resource)

mysql - rails 将 geoip 资源保存在同一个数据库或分离的数据库中哪个更好?

php - PropertyMappingFactory 类尝试使用 twig 获取数组的第一个元素时生成异常

php - 将 JSON 数组转换为 php 中的插入查询字符串

php - 调用未定义的方法 Illuminate\Validation\Rules\In::__set_state()

php - 如何在 php 中创建动态 URL?

symfony1 - Symfony 项目的模型存储在多个数据库中

php - 如何从多个测试用例中执行测试用例的选择

mysql - 如何在 MySql Workbench 中隐藏空白行

php - 从 MySQL 列数据填充下拉列表