您知道学习如何设计 SQL 解决方案的好资源吗?
除了基本的语言语法之外,我还在寻找可以帮助我理解的东西:
- 要构建哪些表以及如何链接它们
- 如何针对不同规模进行设计(小客户端APP到庞大的分布式网站)
- 如何编写有效/高效/优雅的 SQL 查询
您知道学习如何设计 SQL 解决方案的好资源吗?
除了基本的语言语法之外,我还在寻找可以帮助我理解的东西:
我从这本书开始:清晰地解释了关系数据库设计(数据管理系统中的摩根考夫曼系列)(平装本),作者 Jan L. Harrington,发现它非常清晰且很有帮助
当你加快速度时,这个也很好数据库系统:设计、实施和管理的实用方法(国际计算机科学系列)(平装本)
我认为 SQL 和数据库设计是不同(但互补)的技能。
我从这篇文章开始
http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html
与阅读整本书相比,它非常简洁,并且很好地解释了数据库设计的基础知识(规范化、关系类型)。
经验很重要,但在表设计方面,您可以从 Hibernate 和 Grails 等 ORM 的运行方式中学到很多东西,以了解它们为什么这样做。此外:
将不同类型的数据分开 - 不要将地址存储在您的订单表中,例如,链接到单独的地址表中的地址。
我个人喜欢在作为主键的每个表(保存数据,而不是将不同表链接在一起的那些,例如 m:n 关系)上有一个整数或长代理键。
我也喜欢创建和修改时间戳列。
确保您在任何查询中执行“where column = val”的每一列都有索引。对于数据类型来说,也许不是世界上最完美的索引,但至少是一个索引。
设置你的外键。还可以在相关的地方设置 ON DELETE 和 ON MODIFY 规则,以级联或设置 null,具体取决于您的对象结构(因此您只需在对象树的“头部”删除一次,所有该对象的子对象都会得到自动删除)。
如果你想模块化你的代码,你可能想模块化你的数据库模式——例如,这是“客户”区域,这是“订单”区域,这是“产品”区域,并使用连接/链接表它们之间,即使它们是 1:n 关系,并且可能会复制重要信息(即,将产品名称、代码、价格复制到您的 order_details 表中)。阅读规范化。
其他人会为上述部分或全部推荐完全相反的方法:p - 从来没有一种真正的方式来做一些事情,嗯!
我真的很喜欢这篇文章.. http://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo
Head First SQL是一个很好的介绍。
在我看来,这些问题需要来自不同领域的不同知识。
也就是说,也许你想读一些书,我个人在我的数据库大学课程中使用过这本书(找到了一本不错的书,但我没有读过这个领域的其他书,所以我的建议是查看一些数据库设计方面的好书)。
我已经有一段时间没有阅读它了(所以,我不确定其中有多少仍然相关),但我记得 Joe Celko 的 Smarties 的 SQL 这本书提供了很多关于编写优雅、有效和高效查询的信息.