你怎麼稱呼不是主鍵的東西?
我一直在與一個團隊合作,他們已經建立了一個系統,他們在這個過程中創造了一些新術語,我想知道他們是否應該稱之為更標準化的東西。
基本上,他們有包含版本資訊的表,所以表的唯一鍵是被跟踪文件的標識符,加上記錄號(儘管記錄號是自動編號的,所以它本身是唯一的)。他們將構成文件標識符的欄位(每個表都會更改)稱為“主鍵”……但這些欄位既可以單獨也可以集體(例如,如果它具有欄位 A、B 和 C 以獲得唯一標識符,它們可以互換將 A 稱為“主鍵”,將A/B/C 稱為“主鍵”
如果他們有一個規範化的數據庫,這將是一個外鍵的明顯候選者——但它沒有被規範化,所以它不是對不同表的引用。
這個概念是否有一些名稱——一個標識符來選擇一些不是表所基於的概念,但它不是外鍵?
**更新:**它不是備用鍵,因為它不能辨識表中的唯一記錄;它標識一組記錄。拿下表:
id document_id version_no -- ----------- ---------- 1 1 1 2 2 1 3 1 2 4 2 2 5 2 3
因此,我們正在跟踪 5 個對象的元數據,它們是兩個不同的文件,其中一個已更新一次(它的 2 個版本/版本),一個已更新兩次。
我們有以下內容:
- 候選鍵:(id)或(document_id,version_no)
- 自然鍵:(document_id,version_no)
- 代理鍵:(id)
- 主鍵:(id,document_id)(我沒有選擇它)
…如果
document_id
是與另一個表的關係,它將是一個外鍵,但“外鍵”通常也推斷出一個約束(即,該值必須存在於其他表中才能在這裡使用).. .但在這種情況下,它不是。那麼,是否有其他術語可以將其描述為選擇相關的對象分組而不是表中的單個記錄?維基百科頁面上代理鍵擬合的代理鍵的第一個定義,但這不是該術語的常見用法,大多數人認為代理鍵適合第二個定義:
- 代理 (1):此定義基於 Hall、Owlett 和 Todd (1976) 給出的定義。這裡的代理代表外部世界中的一個實體。代理由系統內部生成,但對使用者或應用程序仍然可見。
- 代理 (2) :此定義基於 Wieringa 和 De Jonge (1991) 給出的定義。這裡的代理代表數據庫本身中的一個對象。代理由系統內部生成,對使用者或應用程序不可見。
更新2:基本上,如果您有一個處理記錄版本控制的表,如果您將記錄移動到新表並儲存編輯歷史,則連結回原始表的欄位將被視為外鍵……但如果您將所有內容儲存在一個表中,與輔助表無關,是否有標識記錄多個版本的欄位組的名稱?
我問的原因是我正在與之合作的團隊決定將其稱為“主鍵”,當我加入時,我查看了他們的所有文件,並告訴他們他們有一個錯字,這是’主鍵’,但他們解釋說不,這是他們創造來描述這個概念的片語。
我正在嘗試確定數據庫社區中是否存在此概念的公認名稱。
使用者術語將主鍵的代理鍵和自然鍵作為變體。
代理鍵:
代理鍵是沒有“業務”意義的鍵,僅用於標識表中的記錄。此類鍵要麼是數據庫生成的(例如:SQL Server 中的身份、Oracle 中的序列、DB2 UDB 中的序列/身份等),要麼是系統生成的值(例如通過模式中的表生成)。
自然鍵:
如果鍵代表的屬性用於獨立於數據庫模式的標識,則鍵是自然的。這基本上意味著如果人們使用它們,這些鍵是自然的,例如:發票號碼、稅號、SSN 等。
“候選鍵”是可以唯一標識表中記錄的任何列或列集合。
“主鍵”是定義為表的主鍵的候選鍵。
在內部,主鍵只是一個唯一索引,集群或非集群,通常用於外鍵關係。
與往常一樣,還有更多的東西,但我希望這會有所幫助。