在 SQL Server 中,我有以下包含学位级别的查找表:

create table dbo.DegreeLevel
(
    Id int identity not null
       constraint PK_DegreeLevel_Id primary key clustered (Id),
    Name nvarchar (80) not null
       constraint UQ_DegreeLevel_Name unique (Name)
)

我应该在 ID 上使用身份吗?

我什么时候应该在查找表中使用标识或简单的 int?

最佳答案

我想这归结为你是否有一个自然的候选者可以在聚集索引中使用......

如果您已经拥有可以唯一标识行的属性,那么添加标识列是否是正确的做法绝对值得考虑。

如果您没有天生的候选人,那么您需要创造一个值,在这种情况下,使用标识列或序列可能比手动滚动更容易。

作为具有自然键的示例,假设有一个“DegreeModule”表,其中每个模块都有一个 4 字符的引用代码,该代码印在类(class) Material 上(例如 U212)

在这种情况下,我肯定会跳过创建内部标识符并使​​用自然标识符作为主键......

create table dbo.DegreeModule
(
    Reference char(4) not null primary key clustered,
    Name nvarchar(80) not null
       constraint UQ_DegreeModule_Name unique (Name)

    /* .. plus FK's for stuff like parent degree, prerequisites,etc .. */
)

关于sql-server - 在查找表上使用或不使用标识,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29848758/

10-12 15:47