2013-12-10 26 views
0

如对于多租户数据库的常用方法,我在每一个表中,而这又是相同的SUSER_SID一个TenantId TenantId的数据类型,并享有基于在由TenantId = suser_sid()过滤的表上。索引和链接到SUSER_SID()在多租户数据库

虽然这对大部分工作正常,因为我的suser_sid()返回一个数据类型varbinary(85),TenantId的自然数据类型是varbinary(85)。

由于显而易见的原因,这并不适合包含在主键或外键关系中,因为我认为在主索引中使用可变长度是一个坏主意(如果我错了,请告诉我) 。

将使用二进制(85)为TenantId是一个更好的主意吗?或者我应该使用bigint,并且像这样转换(bigint,suser_sid())并且与之进行比较,并且希望不同租户不会有冲突。

回答

0

实际上,​​是租户标识符的一个很好的候选者,它非常支持索引,并且可以在自身中用作主键,在引用表中用作外键。如果您必须从代码中生成一个,则不需要大的逻辑或思考过程。只需拨打Guid.NewGuid()就可以在C#中实现。 SQL服务器也可以返回最后插入的我放心。因此,我觉得这可能是合适的候选人。

+0

对于一个85位的二进制标识符,16字节的GUID是否过大。它会比二进制(85)提供更好的索引性能吗? – user1489313

+0

我还没有试过,所以现在没有结果分享。但是如何在使用二进制作为列数据类型时生成唯一值。从应用程序的角度来看,guid具有相同的类型,二进制不是这种情况。如果努力确保二进制值的唯一性并且超过我们可以考虑使用的指南。 – Saravanan