首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助为SaaS应用程序设计数据库架构

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

Stack Overflow用户
提问于 2016-08-02 03:14:33
回答 2查看 1.5K关注 0票数 2

我是一名开发人员,以前从未在DB上工作过(设计DB)。我正在为一个员工管理系统设计一个数据库,这是一个Node.js + Express应用程序,使用MySQL作为其DB。

我已经有了所需的表、列,但我处理的未知数仍然很少。到目前为止,这是我的计划,我需要你的意见。

  1. 使用此应用程序的最终用户将是中小型公司。公司不会共享数据库中的表格。因此,如果有一个名为EmployeeCases的表,我计划为每个现有公司创建一个新的EmployeeCases表,或者为这个应用程序注册一个新的表。我计划将该表命名为EmployeeCases_989809890,其中"989809890“将是公司id (或客户id)。因此,如果我们有3-4家公司为我们注册,那么所有的表(至少是公司使用的表)都将被重新创建并命名为TableName_CompanyId。我的问题,这是个好办法吗?有更好的办法吗?
  2. 所有员工的数据都由Employee表保存,包括他们的登录名和密码。现在DB中的每个Employee表将被命名为Employee_CompanyId (按照我上面的计划)。我的问题是,当员工登录时,我如何知道要查询哪个雇员表?还是应该从Employee表中移除登录名,并创建一个通用用户表,以便存储所有员工?User表还将CompanyId作为其列之一,我将从其中读取用于查询其他表的CompanyId。

任何关于这类设计的参考、网站或博客将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 03:42:37

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

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

( B)为每个公司建立单独的数据库,并使用代码使用适当的数据库。

问题是,使用您的方法,如果您有多个具有不同名称的表的副本,将很难维护您的应用程序。例如,如果决定向其中一个表添加列,则必须编写与表实例相同的SQL脚本。对于所有的唯一标识符,您也会有一个糟糕的时间。

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

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

优势:

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

缺点:

  • 不可携带(客户不能带着他/她的数据离开)
  • 可能会被认为不那么安全(我想你可以用两种方式证明这一点)
  • 更有可能有巨大的桌子
  • 没有很好的比例

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

优势:

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

缺点:

  • 需要更多的纪律来跟踪所有的数据库
  • 需要很好地隔离集线器的一部分(跟踪哪个客户端访问哪个数据库的应用程序)和客户端数据库的一部分。
  • 您需要一个逐个公司的登录页面(或者让客户在某个字段中指定公司)。

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

我认为谷歌工作应用程序是同一种方法。而且,我认为我工作过的大多数CRM都为他们的客户提供了一个单独的数据库。

最后,我想向您介绍链接到一个有趣示例的关于堆栈溢出的另一个问题

票数 3
EN

Stack Overflow用户

发布于 2016-08-02 03:22:08

你不应该仅仅因为公司不愿意分享他们的信息就把你的桌子分开。相反,您应该在每个表中都有一个companyId列,并访问每个查询的相关数据。这应该在后端实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38711213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档