在为SaaS应用程序设计数据库架构时需要帮助

代码进行中

我是一名开发人员,从没有从事过数据库方面的工作(设计数据库)。我正在设计一个用于员工管理系统的数据库,该系统是一个使用MySQL作为数据库的Node.js + Express应用程序。

我已经有所需的表格和列,但我要处理的未知数仍然很少。到目前为止,这是我的计划,我需要您的投入。

  1. 使用此应用程序的最终用户将是中小型公司。这些公司将不会共享数据库中的表。因此,如果有一个名为EmployeeCases的表,我计划为每个现有公司或注册该应用程序的新公司创建一个新的EmployeeCases表。我打算将该表命名为EmployeeCases_989809890,其中“ 989809890”将是公司ID(或客户ID)。因此,如果我们有3-4家公司为我们注册,那么将重新创建所有表(至少是公司使用的表)并将其命名为TableName_CompanyId。我的问题是,这是个好方法吗?有没有更好的办法?

  2. 所有员工的数据都保存在Employee表中,包括他们的登录名和密码。现在,数据库中的每个Employee表将被命名为Employee_CompanyId(按照我上面的计划)。我的问题是,当员工登录时,我如何知道要查询哪个员工表?还是应该从Employee表中删除登录名并创建一个通用的Users表,将在其中存储所有雇员?Users表还将把CompanyId作为其列之一,我将从那里读取CompanyId,该查询将用于查询其他表。

任何有关此类设计的参考资料,网站或博客都将受到赞赏。

谢谢。

玛格达特

我不推荐这种方法,我认为您应该:

A)将所有信息放在相同的表中,并使用companyId列对其进行排序

或者

B)每个公司都有单独的数据库,并使用代码使用适当的数据库。

问题是,如果您拥有同一个表的多个副本且名称不同,那么使用您的方法将很难维护您的应用程序。例如,如果决定在其中一个表中添加一列,则必须编写与表实例一样多的SQL脚本。使用所有唯一标识符也很麻烦。

以下是每种设计的一些优点/缺点:

A)将所有信息放在相同的表中,并有一个compagnyId列来对它们进行排序

好处:

  • 最简单的
  • 允许使用外键/约束
  • 非常适合跨/客户数据提取

缺点:

  • 不可移植(客户不能随便离开他/她的数据)
  • 可以认为安全性较差(我想您可以同时使用两种方法)
  • 更有可能拥有巨大的桌子
  • 伸缩性不是很好

B)每个公司都有单独的数据库,并使用代码使用适当的数据库。

好处:

  • 便携的
  • 可以认为更安全

缺点:

  • 需要更多的纪律来跟踪所有数据库
  • 需要很好地隔离HUB(您的应用程序跟踪哪个客户端访问哪个数据库)的内容,以及HUB(客户端数据库的一部分)的内容。
  • 您需要按公司登录页面(或让您的客户在字段中指定公司)

使用此“两步登录”的应用程序示例为Slack,当您登录时,首先输入您的团队域,然后输入您的用户凭据。

我认为Google Apps for Work是相同的方法。另外,我认为与我合作的大多数CRM都为他们的客户提供了一个单独的数据库。

最后,我想将您引向另一个关于stackoverflow的问题该问题链接到一个有趣的示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在设计数据库时需要帮助

如何为聊天应用程序中的民意测验设计数据库架构?

在为基本聊天Web应用程序制作mysql数据库模型时需要指导

软件即服务(SaaS)的应用程序设计

是否有任何数据库混淆了NULL和“ NULL”,还是它总是导致应用程序设计失败?

面向错误跟踪应用程序的OOPS数据库设计帮助

为托管/云解决方案设计数据库和应用程序

我在使用mysql作为数据库的Golang Web应用程序上需要帮助

需要帮助刷新我的应用程序中的数据库 ListView

在应用程序启动时检查数据库架构是否与SQLAlchemy模型匹配

Azure不会在EFCore 2应用程序发布时创建数据库架构

Java GUI应用程序架构+数据库,MVC

健身锻炼日志应用程序的数据库架构

汇率应用程序的数据库架构

Java数据库驱动程序设计

Django应用程序的数据库设计

使用“标签”的应用程序的数据库设计

牙医应用程序的数据库设计

学术测验应用程序的数据库设计

症状检查器应用程序的数据库设计

数据库设计问题...用于预订应用程序

数据库与应用程序安全性设计

当需要混合使用 javafx(第 3 方库)和 spring mvc rest 时选择什么 java 应用程序设计

如何为AWSless Serverless应用程序迁移(更新数据库架构)数据库

为什么应用程序只在需要时而不是在开始时才创建数据库应用程序?

帮助程序设计

Flutter Web 应用程序需要本地数据库

我需要此应用程序的数据库吗?

汽车数据库Web和桌面应用程序的数据库设计