SQL Server事务表是否可以将代理键作为其主键(具有子表)作为主键?

时间:2019-02-27 18:39:57

标签: sql-server primary-key

我曾使用事务表的自然键作为主键,但被告知要使用代理键作为主键。但是此表有一个从属子表。我想知道在具有子表的情况下选择表的主键的最佳做法是什么-在自然键与代理键之间。

如果首选替代键,我将如何将此替代键派生到子表中以建立外键关系?我知道我们是在数据仓库环境中执行此操作的,首先要对维表键进行查找,然后才加载维表,然后加载事实表。

请给我您关于什么是事务性关系数据库设计的最佳方法的意见?

感谢您在这方面的帮助。

谢谢! 瓦伦

1 个答案:

答案 0 :(得分:1)

在Microsoft SQL Server中,定义为PRIMARY KEY的键和定义为UNIQUE约束的键之间没有太大区别。因此,使主键成为替代项没有任何特殊优势。

使用外键约束引用代理键的一个缺点是您通常需要在代码中进行额外的联接和查找。因为任何搜索通常都将基于自然键,所以您将需要额外的联接-或至少是额外的索引查找操作-首先找到代理键值。每当您要修改子表中的引用行时,通常都需要进行这种查找或联接。

如果在插入父表之后立即在子表中插入行,则可以在那里进行代理值的检索,而无需任何额外的操作。如果代理是IDENTITY列,则可以使用SCOPE_IDENTITY函数检索最后插入的值。另外,也可以在INSERT语句上使用OUTPUT子句来检索插入的值-在插入多行时很有用。