我應該使用每個相關表的外鍵還是不應該? 如果我應該使用,爲什麼?我應該真的使用外鍵嗎?
6
A
回答
6
「所有相關表格」並不總是清晰的,所以它不是一個明顯的情況。可以有表格有一個共同的列,但可能永遠不會看到對方。
但是,防止錯誤越過主要防禦措施並允許輸入不容易追蹤的數據很方便。
如果你有適當的索引,它們不會幫助提高查詢的效率,而且一個好的應用程序會過濾足夠的輸入以避免它們被需要。但是錯誤會發生,而且這是一種廉價的防線。
如果您只是習慣於設計數據庫,那麼一旦擁有基本的父母/子女關係後,他們不會花費大量時間擔心和精細細節。
下面是一些background--
4
是的,您應該。外鍵只是幫助您建立關係並確保您的數據庫中有正確信息的約束。您應該使用它們來防止任何錯誤的數據輸入。
6
您應該。有三個要點:
- 根據您的數據庫系統中,你可以得到更好的性能
- 外鍵確保數據的完整性,例如可以幫助避免孤立記錄等
- 他們一個明確的方式來記錄你的數據庫結構,它可以通過工具進行可視化使用,代碼生成等
6
是。但在中等水平。這有助於查詢數據。它有助於索引數據,因此查詢速度更快。它也有助於維護實體之間的關係。
5
使用外鍵是依據之一(如果不是唯一的),關係型數據庫的主要概念。你當然應該在需要的地方使用外鍵。因爲這有助於:
- 確保數據的有效性和完整性
- 節省大量的額外空間
第一個手動裝置,而不是增加一個值,會到現場對於其他記錄,您只需從您在相關主鍵表中選擇的記錄中重複。如果您嘗試在另一個表中輸入一些不存在的主鍵,則會被拒絕(在某些數據庫中,您可以調整此行爲)。
第二個意思是你不必每次都寫「美利堅合衆國」,這需要比寫「美利堅合衆國」ID更多的空間。
1
目前實際上越來越遠離基於外鍵的關係數據庫。像MongoDB這樣的文檔數據庫系統變得越來越流行。這主要是因爲這個世界正隨着雲變得更加分散。
這意味着有時不合理或高效地假設立即數據一致性。
如果您有興趣,請閱讀基於NoSQL的數據庫,MongoDB CouchDB和容量平衡。
它有點爲我們的關係訓練有素的頭腦,瞭解一個奇怪的事情,但很多大型的網絡解決方案
的相關問題
- 1. 我應該真的使用NoSQL嗎?
- 2. MySQL外鍵:我應該設置它嗎?
- 3. 我應該*真的*調用DataBind()嗎?
- 4. 我應該使用外鍵或不
- 5. 我應該使用外鍵的外鍵還是字符串值?
- 6. 我應該使用外鍵連接這3個表嗎?
- 7. 我應該索引一個外鍵?我應該使用這張表的主鍵嗎?
- 8. 應該添加使用日期和外鍵的標識列嗎?
- 9. 我的表不需要主鍵,我應該使用它嗎?
- 10. 我應該使用AJAX嗎?
- 11. 我應該使用document.writeln嗎?
- 12. 我應該使用convertView嗎?
- 13. 我應該使用node.js嗎?
- 14. 我應該使用NHibernate嗎?
- 15. 我應該使用Hadoop嗎?
- 16. 我應該使用Zend_Auth嗎?
- 17. 我應該使用mahout嗎?
- 18. 我應該使用Subversion嗎?
- 19. 我應該使用JAI嗎?
- 20. 我應該使用CRUD嗎?
- 21. 我應該使用AutoreleasePool嗎?
- 22. 我應該使用cflock嗎?
- 23. 我應該使用ExecutorService嗎?
- 24. 我應該使用Zend_Form嗎?
- 25. 我應該使用Application.Lock()嗎?
- 26. 我應該使用fieldset嗎?
- 27. 我應該使用InnoDB嗎?
- 28. 我應該使用dequeReusableCellWithIdentifier嗎?
- 29. 我應該使用Cookie嗎?
- 30. 我應該使用Bootstrap嗎?
可能重複[外鍵真的有必要在數據庫設計?(http://stackoverflow.com /問題/ 18717 /是,外國鍵,真的,有必要-IN-A-數據庫設計) – cHao 2012-01-06 07:31:34