我對選擇表主鍵有疑問。 假設我們有3個相關的表如下所述:表索引性能。關於選擇主鍵的選項
TBL_A
{
'A1' varchar (64), // assume this is the unique attribute.
'A2' varchar (64),
}
TBL_B
{
'B1' varchar (64), // assume this is the unique attribute.
'B2' varchar (64),
}
TBL_C
{
'C1' varchar (64), // assume this is the unique attribute.
'C2' varchar (64),
}
關係:
- TBL_A和TBL_B爲多對多之間,
- TBL_AB和TBL_C之間的一對多
的問題是:
哪一個更好:選項A:將每個表的唯一屬性設置爲表的主鍵?或者選項B:創建另一個屬性作爲一個id(自動編號)並用唯一約束來設置表的唯一屬性。 (將應用於所有這三個表)。
然後TBL_AB將需要複製TBL_A和TBL_B中的主鍵作爲參考鍵。這個問題和我以前的問題一樣,我們是否應該將這兩個引用鍵保留爲TBL_AB的主鍵。或者創建一個新的唯一屬性(自動編號)作爲TBL_AB的主鍵,並使兩個引用的屬性具有唯一約束條件更好。
因爲od TBL_C將引用TBL_AB的主鍵,當然我們在前兩個問題中選擇的選項將會生效。如果我們選擇第一個選項,將會有兩個引用屬性,但是如果我們選擇第二個選項,我們將只有一個引用屬性。你怎麼看,。?
的想法是當我們在搜索的情況下,將查詢一個整數(或數字)輸入主鍵進行比VARCHAR類型的主鍵快,。? 哪一個更好?當然如果你有'爲什麼',。
謝謝你的每一個答案和建議。 關於,
_Why_你有'b1'和'c1'作爲他們表的屬性嗎?僅僅因爲那是'Tbl_A'中的關鍵,還是它的唯一鍵的一部分呢?並且您有多少行存儲/處理(請記住,在連接期間處理的行數會增加!)? 「Tbl_AB」的定義是什麼/在哪裏?是聯合/視圖還是什麼,爲什麼要合併這些表? –
嗨Christian,a1,b1, – simaremare