在 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/