2016-05-14 58 views
-1

大表記錄由複合鍵標識,該鍵的組成部分是什麼?使它合成有什麼好處?大表和複合鍵

+0

哪個鍵是「這個鍵」? – philipxy

+0

<複合鍵> – Abdussalam

+0

你的問題不清楚。你在問什麼「組合鍵」的含義? – philipxy

回答

1

對於非常大的表格(行方向),給每個單獨的行一個唯一的ID將受限於您代表唯一ID的數據類型。例如,如果您將唯一標識存儲爲基本int32,那麼當您有超過2147483647個條目(int32的最大值)時會發生什麼?

我將使用亞馬遜的一個示例,試圖跟蹤客戶查看了哪些項目。你可以想象一個名爲「items_customer_has_viewed」的表格。對於單個客戶來說,爲此表提供唯一的ID不會成爲問題。也許一個客戶在一年內只能查看亞馬遜上的50個項目,並且該數據庫可能會保持較小時間,並保持在2147483647的限制以下。但是,當您擁有數百萬用戶時,唯一ID的值將變得過大。

您可以選擇將您的唯一標識存儲爲字符串或blob,但這會降低數據庫速度並需要額外的計算。

解決方案是使用複合鍵。您不需要具有標識單個「視圖」或「客戶已查看的項目」的唯一標識,而是通過兩個外鍵(一起形成一個組合主鍵)來識別該「視圖」。現在,您只需要少於2147483647個客戶,並且少於2147483647個項目,並且您會一切正常。你將不會有問題存儲的ID。

+0

因此,大多數數據庫將允許非常大的數字數據類型,因此您不需要求助於字符串,斑點或組合鍵。例如,PostgreSQL序列在默認情況下會生成最多2^63-1,大整數類型的範圍可達9,223,372,036,854,775,807。數字類型將在小數點前處理多達131,072位數字。因此,如果您需要使用其中一種技巧來存儲多行數據,那麼您已經對數據庫做出了極差的選擇。 –