我是一名开发人员,从没有从事过数据库方面的工作(设计数据库)。我正在设计一个用于员工管理系统的数据库,该系统是一个使用MySQL作为数据库的Node.js + Express应用程序。
我已经有所需的表格和列,但我要处理的未知数仍然很少。到目前为止,这是我的计划,我需要您的投入。
使用此应用程序的最终用户将是中小型公司。这些公司将不会共享数据库中的表。因此,如果有一个名为EmployeeCases的表,我计划为每个现有公司或注册该应用程序的新公司创建一个新的EmployeeCases表。我打算将该表命名为EmployeeCases_989809890,其中“ 989809890”将是公司ID(或客户ID)。因此,如果我们有3-4家公司为我们注册,那么将重新创建所有表(至少是公司使用的表)并将其命名为TableName_CompanyId。我的问题是,这是个好方法吗?有没有更好的办法?
所有员工的数据都保存在Employee表中,包括他们的登录名和密码。现在,数据库中的每个Employee表将被命名为Employee_CompanyId(按照我上面的计划)。我的问题是,当员工登录时,我如何知道要查询哪个员工表?还是应该从Employee表中删除登录名并创建一个通用的Users表,将在其中存储所有雇员?Users表还将把CompanyId作为其列之一,我将从那里读取CompanyId,该查询将用于查询其他表。
任何有关此类设计的参考资料,网站或博客都将受到赞赏。
谢谢。
我不推荐这种方法,我认为您应该:
A)将所有信息放在相同的表中,并使用companyId列对其进行排序
或者
B)每个公司都有单独的数据库,并使用代码使用适当的数据库。
问题是,如果您拥有同一个表的多个副本且名称不同,那么使用您的方法将很难维护您的应用程序。例如,如果决定在其中一个表中添加一列,则必须编写与表实例一样多的SQL脚本。使用所有唯一标识符也很麻烦。
以下是每种设计的一些优点/缺点:
A)将所有信息放在相同的表中,并有一个compagnyId列来对它们进行排序
好处:
缺点:
B)每个公司都有单独的数据库,并使用代码使用适当的数据库。
好处:
缺点:
使用此“两步登录”的应用程序示例为Slack,当您登录时,首先输入您的团队域,然后输入您的用户凭据。
我认为Google Apps for Work是相同的方法。另外,我认为与我合作的大多数CRM都为他们的客户提供了一个单独的数据库。
最后,我想将您引向另一个关于stackoverflow的问题,该问题链接到一个有趣的示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句