zer*_*law 3 index sql-server linq
我们有大量用于设置表格的表格。在每个表格中,都需要填写Code
和Description
。
代码由varchar(10)
数据类型组成。
现在,问题是,每次用户创建新数据或更新数据时,都需要检查是否Code
与其他人发生冲突。
在 LINQ 中,这种代码检查是不可避免的:
string ExistingCode = "ITEM01";
int ExistingKey = 1;
var recordWithConflictedCode = (from a in db.MyTable
where a.Code == ExistingCode &&
a.Key != ExistingKey).ToList();
if(recordWithConflictedCode.Count >= 1)
return BadRequest("Duplicated Code found");
Run Code Online (Sandbox Code Playgroud)
现在,由于这涉及对每个进程的字符串比较,我认为对列Code
进行索引以使查询更快是有意义的。
这对你们来说是一种常见的做法吗?
将 DBMS 用于其预期目的;即在表上创建约束,使其符合业务规则。
设计您的表,使其看起来像:
USE tempdb;
CREATE TABLE dbo.MyTable
(
[Key] int NOT NULL
, Code varchar(10) NOT NULL
CONSTRAINT uq_MyTable_Code
UNIQUE
);
Run Code Online (Sandbox Code Playgroud)
这将确保插入的每一行MyTable
都有一个唯一的Code
列。现在,您可以try ... catch
在 .Net 代码中围绕您的插入添加一条语句,以在检测到重复项时通知用户。
SQL Server 引擎将自动在表上创建唯一索引以支持约束。您可以手动在表上创建唯一索引以满足相同的要求;但是,以上面详述的方式将其添加为唯一约束以自我记录业务规则。
归档时间: |
|
查看次数: |
85 次 |
最近记录: |