2009-05-28 18 views

回答

4

這是一個權衡。反對外鍵的通常參數是外鍵的索引在插入/更新/刪除時會產生一些性能開銷。 就像任何索引。

但是,當您通過該列進行搜索時,索引也會帶來很大好處。

SELECT * FROM Child WHERE parent_id = :id 

也不要低估尋找孤兒和清理bollixed引用,這是忽略外鍵約束的必然結果的開銷。

-- Typical chore: searching for orphaned child rows. 

SELECT c.* FROM Child c LEFT OUTER JOIN Parent p 
    ON (c.parent_id = p.parent_id) 
WHERE p.parent_id IS NULL; 

也有一些數據庫設計中,你無法使用外鍵,比如多態關聯或實體 - 屬性 - 值。但是這些設計本身就是反模式。

1

表現。插入子記錄以確定是否存在父記錄時需要付費。你仍然可以訪問父記錄(假設你在子表中有一個parentID列,只是沒有參照完整性)。

相關問題