0

很高兴听到你们讨论如何最好地考虑索引策略,因为这些表中的数据在未来可能会大幅增长。决定通过将多租户数据存储在单表方法中来进行。例如,我只有几个表用于此讨论。

CREATE TABLE [dbo].[TenantID](
    [TenantID] [smallint] IDENTITY(1,1) NOT NULL,
    [TenantName] [varchar](128) NOT NULL
) 
CREATE TABLE [dbo].[MenuType](
    [MenuTypeID] [int] IDENTITY(1,1) NOT NULL,
    [TenantID] [smallint] NOT NULL,
    [MenuTypeName] [varchar](128) NOT NULL
) 
  • MenuTypeName 对于每个租户应该是唯一的。因此,我将 在 TenantID 和 MenuTypeName 上有一个唯一索引
  • TenantID 应参考 Tenant 表。因此,TenantID 上的外键
  • 我仍在考虑是否应该在 MenuTypeID 上有主键或只是一个聚集索引,它是一个自动增量列。
  • 将来,当表大小增加时,我应该能够轻松地将基于 TenantID 的数据分区到新的数据库服务器。

问题:

  1. 我真的需要在 MenuTypeID 上定义主键吗,因为我们知道 SQL Server 保证增量种子。我可以在 MenuTypeID 上定义一个聚集索引吗?
  2. 在 TenantID 和 MenuTypeName 上定义唯一键。

使用这种方法,我在表设计中不会有主键的概念。但是,我想知道我将来是否会因为表中没有主键而招来麻烦?

4

1 回答 1

0

尽管 SQL Server 应该分配增量IDENTITY值,但仍然可以通过 with 引入 dups IDENTITY_INSERT ON考虑对TenantIDMenuTypeID的复合主键约束以保证主键是唯一的,并考虑对 TenantID和MenuTypeName的唯一约束以确保MenuTypeName对于每个租户都是唯一的仅 MenuTypeID 上的唯一索引/约束在这里没有任何价值,假设它在没有 TenantID 的情况下从未使用过。

指定CLUSTERED约束索引之一。聚集索引的最佳选择取决于您最频繁的查询。如有疑问,通常最好将主键索引设为聚集索引。

于 2015-08-01T12:37:42.620 回答