[英]SQL Server Foreign Key constraint benefits
我們正在設計一個數據庫,我需要考慮一些FK(外鍵)約束。 但它不僅限於正式的結構化和規范化。 我們只有在提供任何性能或可擴展性優勢時才會使用它。
我一直在通過一些有趣的文章和谷歌搜索實際的好處。 以下是一些鏈接:
http://www.mssqltips.com/tip.asp?tip=1296
我想更多地了解FK的好處(除了正式的結構和着名的級聯刪除\\更新)。
FK默認情況下沒有“索引”,因此在索引FK時需要考慮哪些因素?
如何處理映射為外鍵的可空字段 - 這是允許的嗎?
除了索引之外,這是否有助於優化SQL-Server中的查詢執行計划?
我知道還有更多,但我更願意專家就此發表意見。 請指導我。
主要的好處是,如果您的錯誤客戶端代碼試圖做錯了,您的數據庫將不會最終不一致。 外鍵是一種“約束”,所以你應該如何使用它們。
他們沒有任何“功能”好處,他們不會優化任何東西。 您仍然必須自己創建索引等。是的,您可以在作為外鍵的列中具有NULL值。
FK約束使您的數據保持一致。 而已。 這是主要的好處。 FK約束不會為您提供任何性能提升。
但是,除非你有目的的db結構非規范化,否則我建議你使用FK約束。 主要原因 - 一致性。
我已經在net上讀過至少一個示例,其中顯示外鍵確實提高了性能,因為優化器不必對表進行額外的檢查,因為它知道數據已經因FK而滿足某些條件。 對不起,我沒有鏈接,但博客提供了詳細的查詢計划輸出來證明它。
如上所述,它們用於數據完整性。 任何性能“損失”都會被修復損壞數據所需的時間徹底消除。
但是,可能存在間接的性能優勢。
至少對於SQL Server,FK中的列必須在每一側具有相同的數據類型。 如果沒有FK,您可以擁有nvarchar父級和varchar子級。 當您加入2個表時,您將獲得可以扼殺性能的數據類型轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.