如果你有有沒有什麼理由可能不想在關聯中使用foreign_key?
Parent
has_many :children
Child
沒有任何理由的外鍵上的孩子(向母公司)和相應的belongs_to :parent
可能是不希望?
何時,如果有的話,你會不想讓你的孩子能夠訪問其父?
如果你有有沒有什麼理由可能不想在關聯中使用foreign_key?
Parent
has_many :children
Child
沒有任何理由的外鍵上的孩子(向母公司)和相應的belongs_to :parent
可能是不希望?
何時,如果有的話,你會不想讓你的孩子能夠訪問其父?
這是一個權衡。反對外鍵的通常參數是外鍵的索引在插入/更新/刪除時會產生一些性能開銷。 就像任何索引。
但是,當您通過該列進行搜索時,索引也會帶來很大好處。
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;
也有一些數據庫設計中,你無法使用外鍵,比如多態關聯或實體 - 屬性 - 值。但是這些設計本身就是反模式。
表現。插入子記錄以確定是否存在父記錄時需要付費。你仍然可以訪問父記錄(假設你在子表中有一個parentID列,只是沒有參照完整性)。