Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 数据库中每个客户端的表_Sql Server 2008_Locking_Optimistic Locking_Pessimistic - Fatal编程技术网

Sql server 2008 数据库中每个客户端的表

Sql server 2008 数据库中每个客户端的表,sql-server-2008,locking,optimistic-locking,pessimistic,Sql Server 2008,Locking,Optimistic Locking,Pessimistic,我们开发的服务是为每个客户用户都可以预约。 数据库(MS SQL SERVER)中是否有适合每个客户机的策略表 我们认为这样的策略简化并排除了复杂的表锁定。听起来您正试图构建一个多租户应用程序。我不建议每个客户都有一张桌子。相反,我会推荐两种解决方案之一: 将所有客户端(租户)数据集成到相同的表中,并通过标识符进行分隔。换句话说,每个顶级表都有一个外键,称为“ClientId”或“TenantId”,用于标识和分隔每个客户机的数据。这种方法的缺点是,数据库变得越来越大,速度越来越快,而大型数据库

我们开发的服务是为每个客户用户都可以预约。 数据库(MS SQL SERVER)中是否有适合每个客户机的策略表


我们认为这样的策略简化并排除了复杂的表锁定。

听起来您正试图构建一个多租户应用程序。我不建议每个客户都有一张桌子。相反,我会推荐两种解决方案之一:

  • 将所有客户端(租户)数据集成到相同的表中,并通过标识符进行分隔。换句话说,每个顶级表都有一个外键,称为“ClientId”或“TenantId”,用于标识和分隔每个客户机的数据。这种方法的缺点是,数据库变得越来越大,速度越来越快,而大型数据库的管理也越来越复杂。此外,还有一种风险,即开发人员构建的查询忘记在ClientId上进行过滤,并且一个客户端看到另一个客户端的数据

  • 每个客户端一个数据库。这是一个更极端的解决方案,但如果客户机将托管自己的应用程序,如果每个客户机的数据大小存在巨大差异,或者如果客户机希望绝对保证数据分离,则该解决方案非常有用


  • 我认为外键的情况不适用,因为一个表最多有256个。另一方面,我们应该为每个客户机存储一个包含数据的表。因为在并行工作的情况下,许多用户(100-1000)可以访问一个表;如果每个客户端有一个表,那么它将有1-10个用户。@Alexandr-Huh?每个顶级表中都会有一个外键列引用一个客户端表。@Alexandr-我绝对不建议为每个客户端添加FK列。这毫无意义,也没有规范化,是不必要的。相反,每个顶级表都将包含所有客户机的数据,在这些客户机中,您可以通过一列将一个客户机的数据与另一个客户机的数据区分开来,该列是客户表的FK。@Alexandr-例如,假设我们的系统正在存储业务合作伙伴。我们将有一个BusinessPartners表,其中包含适用于该实体的属性(名称、地址、电话等)和另一个名为“TenantId”或“ClientId”的列,这将使我们能够区分一个客户的业务合作伙伴和另一个客户的业务合作伙伴。好的,我们可以存储客户,但我的意思是当我们为所有客户提供了许多数据时的结构。是的,我们可以将其存储在一个表中,但我们将面临许多锁定/阻塞副作用。相反,我们希望将每个客户机的数据拆分为每个表,并将对表的引用存储在单独的表中。例如,列[pkClientID,TableName]-data-[1,dbo.tblClient_1],[2,dbo.tblClient_2],…[n,dbo.Client_n]而不是表dbo.Client_的所有数据。