我应该使用每个相关表的外键还是不应该? 如果我应该使用,为什么?我应该真的使用外键吗?
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