【问题标题】:Any option other than a separate database per user?除了每个用户单独的数据库之外的任何选项?
【发布时间】:2015-06-21 16:00:33
【问题描述】:

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

  • 公司

    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 将其解析并发送到应用程序。这样,它只是一个可以下载、修改和重新上传的文件。仅将员工(可能还有公司)存储在一个数据库中。

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 没必要。您可以只使用 id 来识别它们。然后为能够访问某些公司数据的用户设置访问级别
  • 您说“我的客户希望每个用户有一个单独的数据库”。用户是谁?公司?还是管理多家公司的代理?
  • @light - 每个公司

标签: php mysql multiple-databases


【解决方案1】:

您绝对不需要为每个用户创建一个单独的数据库。很难准确说出“用户”是什么意思,但听起来像是一家公司。

相反,只需在所有适当的表中包含companyid。从您的列表中,这似乎是除了 individual_employee_permissions 表之外的所有内容(您将公司从 join 获取到员工)。

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

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

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

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

【讨论】:

  • 假设一家公司要求一个独特的员工权限,是否有一种方便的方法可以在单个数据库上执行此操作?向所有用户推出它并不是最糟糕的事情,只是出于好奇
  • @Sawyer05 。 . .绝对,在某种意义上。您将为每个人定义权限。只有一家公司会使用它。
  • 对不起,我花了这么长时间才接受这个答案。我选择了单一数据库计划,效果很好!
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多