Abd al rahman shebani Asked: 2021-12-25 04:29:27 +0800 CST2021-12-25 04:29:27 +0800 CST 2021-12-25 04:29:27 +0800 CST 在一对一关系中具有与父表相同的主键 772 将两张表建立为一对一的关系,我想考虑哪一张是更好的设计?父表(人)的主键与子表(配置文件)的主键相同,还是为配置文件表构建另一个主键? 我认为在连接两个表时,具有相同的表主键是更好的选择,因为主键将是配置文件表上的聚集索引,因此它不会扫描整个表以获得匹配 sql-server primary-key 1 个回答 Voted Best Answer J.D. 2021-12-25T08:36:50+08:002021-12-25T08:36:50+08:00 关于能够在两个表中使用相同的主键字段,我同意 Charlieface,因为这是一对一的关系。 但我还想提一下,如果您需要为您的Profile表创建一个单独的主键字段,并且您使用辅助字段作为对您的Person表的外键引用,这并不一定意味着它会“扫描当您JOIN通过该外键字段时,整个表将获得匹配的“。它实际上可以(并且可能会)使用索引查找操作,并且具有同样的性能(只要辅助字段上有一个非聚集索引。)。 这是因为 SQL Server 不关心您使用的是聚集索引字段还是非聚集索引字段集JOIN。相反,它根据您的子句中字段值的基数来确定要使用的操作类型。在这种情况下,基数是指谓词返回的行数相对于它们各自表中的总行数。无论您使用表的主键字段作为与表相同的字段还是使用第二个字段,基数在您的情况下都是相同的。JOINONProfilePerson
关于能够在两个表中使用相同的主键字段,我同意 Charlieface,因为这是一对一的关系。
但我还想提一下,如果您需要为您的
Profile
表创建一个单独的主键字段,并且您使用辅助字段作为对您的Person
表的外键引用,这并不一定意味着它会“扫描当您JOIN
通过该外键字段时,整个表将获得匹配的“。它实际上可以(并且可能会)使用索引查找操作,并且具有同样的性能(只要辅助字段上有一个非聚集索引。)。这是因为 SQL Server 不关心您使用的是聚集索引字段还是非聚集索引字段集
JOIN
。相反,它根据您的子句中字段值的基数来确定要使用的操作类型。在这种情况下,基数是指谓词返回的行数相对于它们各自表中的总行数。无论您使用表的主键字段作为与表相同的字段还是使用第二个字段,基数在您的情况下都是相同的。JOIN
ON
Profile
Person