2010-03-23 35 views
-1

主鍵和RRN有什麼區別?主鍵與RRN

+0

當然,這不是。不過,這個問題可以使用更多的上下文。 – 2010-03-23 05:16:57

+0

@Phenom,在最近的問題中回答了這個問題:http:// stackoverflow。com/questions/2497729 /記錄中的文件 – paxdiablo 2010-03-23 05:33:48

+0

答案並不像這個那麼明確。 – neuromancer 2010-03-23 05:58:39

回答

2

主鍵唯一且唯一地標識給定記錄(在數據庫表/視圖中)或給定行(在文本文件中)。儘管主鍵可以基於單個字段(單個「列」),但主鍵也可以基於多個字段/列。

RRN是可以被理解爲 「記錄行數」 或 「相對行號」 的縮寫。記錄行號通常被理解爲一個數字,通常(但不一定)通過簡單增量(基於先前分配的這種RRN的值)來分配,該「增加」到特定記錄類型的其他字段/列。許多DBMS提供支持這種「自動遞增」或更一般自動分配的RRN的功能。

定義如上,RRN可以用作主鍵。

有一個[語義上無效的] RRN與基於記錄的[一個或多個]屬性(字段或列)值的主鍵相反的優點和缺點。這可能在其他SO問題中討論過;這裏有一些最常見的論點:

  • 主鍵可能被修改,RRN是「不可變的」。
    例如,如果主鍵是社會安全號碼(SSN),則記錄可能會在某個時間更新,因爲SSN最初是由於輸入錯誤而導致的。當/如果發生這種情況,任何使用此SSN引用更新記錄的相關記錄也需要更新。如果這些相關記錄使用了[無意義] RRN,它們將不受SSN值可能發生的變化的影響。
  • 當有基於單個列中沒有「天然」的主鍵,它可能是使用RRN
  • 的RRN通常較短
  • 相關表格,並列出其通過的方式是指原始記錄更方便非RRN主鍵,以某種方式複製底層信息。這既是一個優點,也是一個缺點:人們可以知道底層的字段值,而不必在原始表中查找:如果希望相關表包含這樣的信息,那麼很好,如果不這樣做,就很糟糕(例如:社交安全號碼可以被認爲是敏感的等)
  • RRNs被保證是唯一的(短於RRN生成邏輯的錯誤),基於屬性值的鍵有傾向於導致非唯一性(「哎呀!我們認爲我們可以使用電話號碼作爲房屋ID;當電話公司開始重複使用電話號碼......「)
0

主鍵標識表中的一行。

一個RRN(我假定你的意思是相對記錄數)也標識一個子集中的位置(即查詢結果)。

我發現它很有用,如果你需要外推一系列與主鍵無關的記錄的連續順序。