我是开发人员,之前从未使用过DB(设计数据库)。我正在为员工管理系统设计一个数据库,这是一个使用MySQL作为其数据库的Node.js + Express应用程序。
我已经有了必需的表格,列已经整理出来,但我仍然处理很少的未知数。到目前为止,这是我的计划,我需要你的意见。
使用此应用程序的最终用户将是中小型公司。这些公司不会在数据库中共享表格。因此,如果有一个名为EmployeeCases的表,我计划为每个现有公司或注册此应用程序的新公司创建一个新的EmployeeCases表。我计划将该表命名为EmployeeCases_989809890,其中" 989809890"将是公司ID(或客户ID)。因此,如果我们有3-4家公司为我们注册,那么所有表(至少是公司使用的表)都将被重新创建并命名为TableName_CompanyId。我的问题,这是一个好方法吗?有更好的方法吗?
所有员工的数据都由Employee表保存,包括他们的登录名和密码。现在,DB中的每个Employee表都将被命名为Employee_CompanyId(根据我上面的计划)。我的问题是,当员工登录时,我如何知道要查询的Employee表?或者我应该从Employee表中删除登录并创建一个通用Users表,其中将存储所有员工? Users表也将CompanyId作为其列之一,我将从那里读取CompanyId,用于查询其他表。
此类设计的任何参考,网站或博客将不胜感激。
感谢。
答案 0 :(得分:2)
我不推荐这种方法,我认为你应该:
A)将所有信息放在同一个表中,并使用companyId列对其进行排序
或强>
B)为每个公司分别拥有数据库,并使用相应的数据库代码。
问题是,如果您使用不同名称的同一个表的多个副本,那么通过您的方法,您将很难维护您的应用程序。例如,如果您决定将列添加到其中一个表中,则必须编写与表实例一样多的SQL脚本。您的所有唯一标识符也会很糟糕。
以下是每种设计的优点/缺点:
A)将所有信息放在同一个表格中并使用compagnyId列对其进行排序
优点:
缺点:
B)为每家公司建立单独的数据库,并使用相应的数据库。
优点:
缺点:
使用此“两步登录”的应用程序示例为Slack,当您登录时,首先输入您的团队域,然后输入您的用户凭据。
我认为Google Apps for Work是同样的方法。此外,我认为我使用的大多数CRM都为其客户提供了一个单独的数据库。
最后,我想引导您转到一个有趣的例子this other question on stackoverflow。
答案 1 :(得分:0)
你不应该因为公司不能分享他们的信息而拆分你的桌子。相反,您应该在每个表中都有一个companyId列,并且可以访问每个查询的相关数据。这应该在你的后端实现