0

我们有一个旧的修复数据库,它有很多关系表,它可以正常工作,但我需要更新它以能够处理不同的客户端(区域)——目前这仅作为单个客户端完成。

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

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

这是否也适用于托管解决方案(如何完成)?如果这是一个问题,我会担心性能吗?假设我有 500 个客户(我不会,但从理论上讲)?

4

2 回答 2

1

正常情况是在适当的情况下为每个表添加一个客户端密钥。许多表不需要它们——例如参考表。

这是首选的原因有很多:

  • 您在一个地方拥有所有客户的数据,因此您可以轻松回答诸如“每个客户的平均 X 是多少”之类的问题。
  • 如果您更改数据结构,那么它会同时影响所有客户端。
  • 您的备份和恢复策略只执行一次。
  • 您的优化只实施一次。

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

于 2018-08-20T11:57:31.057 回答
0

这个问题以前有人问过。将键添加到每个表的问题是您说您有一个工作系统,这意味着每个查询都需要更新。

可能最简单的方法是为每个客户端创建一个新数据库,这样您唯一需要更改的就是连接字符串。这也意味着您可以获得自动查询工具,例如无需担心跨客户端数据泄漏。

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

这种方法当然有利有弊,但它会简化开发工作。还要记住,如果您打算在云环境中启动它,那么像这样启动数据库也很容易。

于 2018-08-20T04:50:47.113 回答