问题:
对于多租户单一共享数据库 - 是否应将tenantid字段包含在主键中(这将为应用表创建组合键),然后是聚簇索引,或者tenantid是否可以包含在聚簇索引中而不是主键的一部分 - 支持未来的azure联合可能性?
/背景:
我不想制作主键的联合(tenantid)部分,因为我将使用EF5(甚至发布的版本)和OData与Web API,我的理解是在EF和OData中工作使用复合键会使库变得更加困难
我没有明确地读取我需要在哪里创建主键的联合键部分 - 仅复合键
我不需要联邦开始,但如果我需要扩展,我想要选择。
注意,我将仅使用GUID,因为联合会不接受Identity列作为主键(另一个长话题,与此问题无关)
实施例
表:承租人 主键:TenantID(GUID) 聚集索引:TenantID
使用:
表:客户 主键:CustomerID(GUID) 外键:TenantID(GUID) 聚集索引:客户,TenantID
或者:
表:客户 主键:客户,租户(复合主键)(GUID) 外键:TenantID(GUID) 聚集索引:客户,TenantID
的
参考:
以下是Windows Azure Federation Guidelines and Limitations ...的摘录
联合表具有以下限制: 联合表的联合列只能包含确认联合成员range_low包含和range_high独占的数据。
联合列的数据类型必须与联合定义中定义的数据类型完全匹配。
联合表上的所有唯一索引和聚簇索引都必须包含联合列。 联合列在索引中的显示顺序可能与联合中的键序号不同。
联合列值无法更新为联合成员范围之外的值。
联合列不能是持久性或非持久性计算列。
联盟成员不支持索引视图。
联合列不能为NULL。
联合表上的所有外键约束都需要在外键中相同序号的referrer和引用表上包含联合列。引用表不能与联合表具有外键关系。联合表可以没有限制地与引用表具有外键关系。
您可以正常删除使用FEDERATED ON子句创建的表。您还可以使用ALTER TABLE更改联合表的所有属性,但联合属性(例如联合密钥)除外。要将引用表更改为联合表或联合表更改为引用表,必须创建具有所需属性的新表并删除现有表。
当表标记为STATISTICS_NORECOMPUTE时,SPLIT等联合操作不会使统计信息无效或重新计算。在重新分区SPLIT等操作后,这可能会导致执行计划问题。
联盟成员不支持身份属性
联合成员不支持时间戳和rowversion数据类型。
答案 0 :(得分:2)
恕我直言,使用Tenantid是应用程序的内部,以识别基于租户的数据。以下就足够了
表:客户主键:CustomerID(GUID)外键: TenantID(GUID)聚集索引:Customer,TenantID
我没有看到任何有效的原因让tenantid成为复合主键的一部分。此外,通过联合,我们只识别租户及其数据。
因此,您可以将TenantId作为外键/索引。请分享您的想法。