Sql-Server

在一對一關係中具有與父表相同的主鍵

  • December 26, 2021

將兩張表建立為一對一的關係,我想考慮哪一張是更好的設計?父表(人)的主鍵與子表(配置文件)的主鍵相同,還是為配置文件表建構另一個主鍵?

我認為在連接兩個表時,具有相同的表主鍵是更好的選擇,因為主鍵將是配置文件表上的聚集索引,因此它不會掃描整個表以獲得匹配

關係數據圖

表創建語句

關於能夠在兩個表中使用相同的主鍵欄位,我同意 Charlieface,因為這是一對一的關係。

但我還想提一下,如果您需要為您的Profile表創建一個單獨的主鍵欄位,並且您使用輔助欄位作為對您的Person表的外鍵引用,這並不一定意味著它會“掃描當您JOIN通過該外鍵欄位時*,整個表將獲得匹配的“。*它實際上可以(並且可能會)使用索引查找操作,並且具有同樣的性能(只要輔助欄位上有一個非聚集索引。)。

這是因為 SQL Server 不關心您使用的是聚集索引欄位還是非聚集索引欄位集JOIN。相反,它根據您的子句中欄位值的基數來確定要使用的操作類型。在這種情況下,基數是指謂詞返回的行數相對於它們各自表中的總行數。無論您使用表的主鍵欄位作為與表相同的欄位還是使用第二個欄位,基數在您的情況下都是相同的。JOIN``ON``Profile``Person

引用自:https://dba.stackexchange.com/questions/305365