是否将一组现有表扩展为动态客户端定义的结构?

时间:2018-08-20 04:36:42

标签: sql sql-server

我们有一个具有大量关系表的旧修复数据库,它可以正常运行,但是我需要对其进行更新以能够处理不同的客户端(区域)-当前,此操作仅作为单个客户端完成。

所以我需要扩展表和sql语句,以便我可以以用户A的身份登录,他将仅看到自己的系统,而用户B也将拥有自己的系统。

是否正确理解您不会为每个客户端创建新表,而是仅向每个(基本)表中的每个记录添加一个clientID,然后仅在所有sql语句中使用一个clientid进行过滤以实现多个客户端? / p>

在托管解决方案上,这是否也行得通(如何完成)?如果这是一个问题,让我说我有500个客户(我从理论角度讲就不会),我会对性能感到担心吗?

2 个答案:

答案 0 :(得分:1)

通常情况是在适当的地方向每个表添加一个客户端密钥。许多表不需要它们,例如参考表。

出于多种原因,它是首选:

  • 您将所有客户的数据都放在一个地方,因此您可以轻松回答一个问题,例如“每个客户的平均X是多少”。
  • 如果更改数据结构,则它将同时影响所有客户端。
  • 您的备份和还原策略仅实施一次。
  • 您的优化仅实现一次。

这并不总是最好的解决方案。您可能有要求指定必须分隔数据的要求-在这种情况下,每个客户端应位于单独的数据库中。但是,附加键上的索引可能只是一个较小的考虑因素,您不必为此担心。

答案 1 :(得分:0)

此问题曾被问过。将键添加到每个表的问题在于,您说自己有一个工作系统,这意味着每个查询都需要更新。

最简单的方法可能是为每个客户端创建一个新的数据库,因此您唯一需要更改的就是连接字符串。这也意味着您可以使用自动化查询工具来工作,而不必担心跨客户端数据泄漏。

它还允许您轻松地备份,传输,删除单个客户端。

这种方法当然有优点和缺点,但是它将简化开发工作。还请记住,如果您打算在云环境中启动它,那么像这样旋转数据库也很容易。