我们有两张桌子,
ActivityForm
和
Field
通过
ActivityFormField
桌子这个
ActivityFormFieldValidator
表将与
ActivityFormField
ActivityFormField
ActivityFormField
预期用途如下:
-
最终会有很多活动表单和字段,但每个活动表单上只会附加少量字段(平均可能有十几个)。
-
此表上最常见的查询是检索表中的所有条目
具有给定参数的表
ActivityFormId
,并将该数据与
领域
和
ActivityFormFieldValidator
桌子。
-
新的
条目将每隔一段时间创建一次,但不会像上面提到的查询那样频繁。
我的最初反应是使用以下键和索引配置ActivityFormField表:
-
标识列上的主键,其上有聚集索引。
-
一个唯一的非聚集索引,包括
FieldId
和
活动形式
柱。
除了感觉自己最“正确”或“正常”之外,这还满足以下基本要求:
-
确保只有一个
ActivityFormField
任何组合的条目
活动形式
领域
-
为提供索引键
ActivityFormFieldValidator
要附加到的条目,以及
-
在上提供索引键
活动形式
(对于前面提到的查询)
ActivityFormField
条目不应导致实际数据的任何重新排序。
更新
CREATE TABLE [ActivityFormField](
[ActivityFormFieldId] [int] IDENTITY(1,1) NOT NULL,
[ActivityFormId] [int] NOT NULL,
[FieldId] [int] NOT NULL,
[SortOrder] [tinyint] NOT NULL,
CONSTRAINT [PK_ActivityFormField] PRIMARY KEY NONCLUSTERED
(
[ActivityFormFieldId] ASC
),
CONSTRAINT [UK_ActivityFormField_ActivityForm_Field] UNIQUE NONCLUSTERED
(
[ActivityFormId] ASC,
[FieldId] ASC
)
)
ALTER TABLE [ActivityFormField] WITH CHECK ADD CONSTRAINT [FK_ActivityFormField_ActivityForm] FOREIGN KEY([ActivityFormId])
REFERENCES [ActivityForm] ([ActivityFormId])
ALTER TABLE [ActivityFormField] WITH CHECK ADD CONSTRAINT [FK_ActivityFormField_Field] FOREIGN KEY([FieldId])
REFERENCES [Field] ([FieldId])
CREATE UNIQUE CLUSTERED INDEX IX_ActivityFormField_ActivityForm_SortOrder ON [ActivityFormField]
(
[ActivityFormId] ASC,
[SortOrder] ASC
)
CREATE NONCLUSTERED INDEX IX_ActivityFormField_ActivityForm ON [ActivityFormField]
(
[ActivityFormId]
)
CREATE NONCLUSTERED INDEX IX_ActivityFormField_Field ON [ActivityFormField]
(
[FieldId]
)
此方法在标识字段上使用非聚集索引,最常用的查询检索数据的条件和顺序使用聚集索引,并使用约束确保只有一个
条目存在于以下项的任意组合中:
和
领域