我正在爲Timesheet應用程序設計一個Oracle數據庫。我想知道是否真的有必要對錶(主和子)有外鍵約束。爲什麼我應該創建外鍵約束?
正如我們所知道的那樣,從理論上講,在表格上有適當的參照完整性是很好的,但是我們真的需要它們嗎?
我聽說外鍵使得數據庫在每個DML操作上額外工作,因爲它必須檢查FK一致性。這可能會降低性能。但另一方面,在將子行插入子表之前,主鍵已被刪除的情況下可能會有所幫助。
性能是時間表應用程序中的一個主要問題,在本月底將有大約250人填充他們的時間表(可能在同一時間)。
如果我沒有在表上的外鍵約束,那麼我必須首先檢查它(在存儲過程中)如果每次在子表中插入一個新記錄之前主鍵存在主鍵?
加入:在過去,我曾與許多經驗的oracle數據庫開發人員合作,我們從未在表上使用外鍵約束。
250的用戶還不是很多。特別是如果它每週只有一次 - 你不應該關心從foriegn關鍵約束檢查中感知到的性能。 – slugster
http://stackoverflow.com/questions/2317391/is-there-a-severe-performance-hit-for-using-foreign-keys-in-sql-server – Habib
一切,你不要在你的數據庫檢查會最終包含無效數據。所以除非你想在幾年內有大量的數據垃圾,否則實施你的限制。 – Rene