【问题标题】:Indexing and DataType of TenantId Linked to suser_sid() in a Multi-tenancy database多租户数据库中链接到 suser_sid() 的 TenantId 的索引和数据类型
【发布时间】:2013-12-15 17:36:01
【问题描述】:

作为多租户数据库的常用方法,我在每个表中都有一个 TenantId,这又与 suser_sid 相同,并且基于他的表的视图通过 TenantId=suser_sid() 过滤。

虽然这在大多数情况下都可以正常工作,但由于我的 suser_sid() 返回数据类型 varbinary(85),TenantId 的自然数据类型是 varbinary(85)。

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

对 TenantId 使用 binary(85) 会更好吗?还是我应该使用 bigint,然后像这样转换 Convert(bigint, suser_sid()) 并与之进行比较,并希望不同租户不会发生冲突。

【问题讨论】:

    标签: sql sql-server multi-tenant


    【解决方案1】:

    实际上,guid 是租户标识符的良好候选者,它非常支持索引,可以用作自身的主键和引用表中的外键。如果您也必须从代码中生成一个,则不需要大的逻辑或思考过程。只需调用 Guid.NewGuid() 即可在 C# 中解决问题。 SQL server 也可以返回最后插入的我倒是放心。因此我觉得它可能是合适的人选。

    【讨论】:

    • 对于 85 位二进制标识符,16 字节 GUID 会不会过大。它会提供比二进制(85)更好的索引性能吗?
    • 我还没有尝试过,所以目前还没有结果可以分享。但是当使用二进制作为列数据类型时如何生成唯一值。从应用程序的角度来看,guid 具有等效类型,而二进制则不是这种情况。如果一些努力确保二进制值的唯一性并超过我们可以考虑使用的指南。
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多