我們使用序列號爲表上的主鍵。 有些表格我們沒有真正使用主鍵來查詢任何目的。 但是,我們在其他列上有索引。這些是非唯一索引。 查詢在WHERE條件中使用這些非主鍵列。Oracle - 在表上沒有主鍵會有什麼影響嗎?
所以,我真的不明白在這樣的表上有一個主鍵的好處。 我對SQL 2000的經驗是,它用於複製有一些主鍵的表。 否則它不會。
我正在使用Oracle 10gR2。我想知道是否有任何 有沒有主鍵的表的副作用。
我們使用序列號爲表上的主鍵。 有些表格我們沒有真正使用主鍵來查詢任何目的。 但是,我們在其他列上有索引。這些是非唯一索引。 查詢在WHERE條件中使用這些非主鍵列。Oracle - 在表上沒有主鍵會有什麼影響嗎?
所以,我真的不明白在這樣的表上有一個主鍵的好處。 我對SQL 2000的經驗是,它用於複製有一些主鍵的表。 否則它不會。
我正在使用Oracle 10gR2。我想知道是否有任何 有沒有主鍵的表的副作用。
關閉我的頭頂,你不能有一個沒有唯一鍵的外鍵,所以沒有辦法將錶鏈接到其他表。在事實之後改變它並不是微不足道的,因爲訪問這個表的所有代碼都可能受到影響,或者由於移位引用而無法工作,或者以不同的方式執行。另外,我相信我們在uni(但是這是5年前以前)學到獨特的索引對性能更好,因爲行被分割而不考慮它們的內容。
有一些表我們並不真正使用主鍵來查詢任何目的。
那麼爲什麼你有一個序列,如果你永遠不會使用它? 每個表格都必須有一個唯一標識記錄的東西,它不需要是人工增量序列(又名surrogate key),它可能是natural key的組合)。總是有一些查詢通過某種唯一鍵(候選鍵)訪問,這意味着你肯定需要一個索引,你也可以使索引唯一。
上有所有持久(非臨時)表強制PK限制的其他好處:
一個表不需要有主鍵。因爲數據庫中的每一行都有一個Oracle用於存儲和某些內部引用的隱式唯一數據點,所以對於數據庫沒有任何影響。這是ROWID僞列。 ROWID是唯一標識數據庫中每一行的數據 - 有一些值得注意的例外。
我的數據庫下面的查詢返回顯示的數據:
select rowid from user$ where rownum <= 5; AAAAAKAABAAAAFlAAC AAAAAKAABAAAAFlAAD AAAAAKAABAAAAFiAAD AAAAAKAABAAAAFlAAE AAAAAKAABAAAAFlAAF
它不是嚴格必要在一個表上的一個關鍵。我剛纔查詢的Oracle10g數據庫有569個沒有主鍵或唯一鍵的系統表。這是DBA和開發人員應該如何在數據庫表上創建密鑰的決定。我的項目中的開發人員總是創建主鍵,而不管他們的用途或理智。作爲DBA,我只在有意義的地方創建密鑰。
親切的問候,
作品
+1報價。 「如果它沒有主鍵,它不是*一張桌子!」 :-) – 2009-07-01 20:55:27
允許在Unique上使用外鍵,因此不需要PK的那個 – 2015-10-18 16:05:26