首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 資料庫主鍵與外鍵完整指南:定義、差異、索引關係與設計原則

     編輯:關於SqlServer

一、基本定義

  • 主鍵:唯一識別資料列的欄位或欄位組合(如學號、身分證字號),不可為 NULL、不可重複,一張表僅能有一個。
  • 外鍵:建立與另一張表主鍵的關聯(如訂單表的 CustomerID 參考客戶表 ID),可重複、可為 NULL,一張表可有多個。

二、主鍵 vs 外鍵 vs 索引

特性主鍵外鍵唯一索引
目的資料完整性、唯一識別參考完整性、關聯查詢效能、唯一性
NULL不允許允許允許一個
重複不允許允許不允許
數量1 個多個多個
預設索引叢集索引無(需手動建立)非叢集索引

三、叢集 vs 非叢集索引

  • 叢集索引:資料頁即為索引葉層,物理順序 = 邏輯順序,必為唯一(內部加唯一識別碼)。
  • 非叢集索引:葉層儲存索引鍵 + 書籤(RID 或叢集鍵),指向資料頁。

四、主鍵設計五大原則

  1. 無業務含義:使用 Surrogate Key(代理鍵),避免業務變更導致 PK 更新。
  2. 單一欄位:提升 JOIN/篩選效能;複合鍵會傳遞至子表造成鍵膨脹。
  3. 永不更新:PK 唯一識別用途,無更新理由。
  4. 無動態資料:不含時間戳、建立日期等會變動欄位。
  5. 電腦自動產生:IDENTITY、SEQUENCE、UUID,避免人為干預。

五、主鍵選型策略比較

策略優點缺點適用場景
IDENTITY (INT/BIGINT)簡單、效能最佳、儲存小合併資料庫易衝突、離線/分散式難預分配單一資料庫、高寫入
手動號碼表可控制號段、跨庫不衝突增加 Round-trip、並發複雜跨資料庫合併、需預分配
UNIQUEIDENTIFIER (GUID)全域唯一、離線產生、無衝突16 bytes、索引碎片嚴重、效能差分散式、合併複寫
COMB (GUID + 時間)保留唯一性、有序性降低碎片仍較 INT 慢、實作複雜需 GUID 又重視索引效能

六、COMB 實作

DECLARE @aGuid UNIQUEIDENTIFIER;
SET @aGuid = CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER);
SELECT @aGuid; -- 後 6 bytes 為時間,索引較有序

結語

主鍵/外鍵設計是資料庫物理模型的基石,上線後極難變更。遵循「無意義、單欄、不更新、自動產生」原則,配合業務選型(INT IDENTITY 為首選),可兼顧效能、擴充性與維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved