126

您知道学习如何设计 SQL 解决方案的好资源吗?

除了基本的语言语法之外,我还在寻找可以帮助我理解的东西:

  1. 要构建哪些表以及如何链接它们
  2. 如何针对不同规模进行设计(小客户端APP到庞大的分布式网站)
  3. 如何编写有效/高效/优雅的 SQL 查询
4

7 回答 7

60

我从这本书开始:清晰地解释了关系数据库设计(数据管理系统中的摩根考夫曼系列)(平装本),作者 Jan L. Harrington,发现它非常清晰且很有帮助

当你加快速度时,这个也很好数据库系统:设计、实施和管理的实用方法(国际计算机科学系列)(平装本)

我认为 SQL 和数据库设计是不同(但互补)的技能。

于 2008-12-18T10:54:41.940 回答
40

我从这篇文章开始

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

与阅读整本书相比,它非常简洁,并且很好地解释了数据库设计的基础知识(规范化、关系类型)。

于 2012-10-04T17:09:13.620 回答
28

经验很重要,但在表设计方面,您可以从 Hibernate 和 Grails 等 ORM 的运行方式中学到很多东西,以了解它们为什么这样做。此外:

  1. 将不同类型的数据分开 - 不要将地址存储在您的订单表中,例如,链接到单独的地址表中的地址。

  2. 我个人喜欢在作为主键的每个表(保存数据,而不是将不同表链接在一起的那些,例如 m:n 关系)上有一个整数或长代理键。

  3. 我也喜欢创建和修改时间戳列。

  4. 确保您在任何查询中执行“where column = val”的每一列都有索引。对于数据类型来说,也许不是世界上最完美的索引,但至少是一个索引。

  5. 设置你的外键。还可以在相关的地方设置 ON DELETE 和 ON MODIFY 规则,以级联或设置 null,具体取决于您的对象结构(因此您只需在对象树的“头部”删除一次,所有该对象的子对象都会得到自动删除)。

  6. 如果你想模块化你的代码,你可能想模块化你的数据库模式——例如,这是“客户”区域,这是“订单”区域,这是“产品”区域,并使用连接/链接表它们之间,即使它们是 1:n 关系,并且可能会复制重要信息(即,将产品名称、代码、价格复制到您的 order_details 表中)。阅读规范化。

  7. 其他人会为上述部分或全部推荐完全相反的方法:p - 从来没有一种真正的方式来做一些事情,嗯!

于 2008-12-18T11:49:33.030 回答
15

我真的很喜欢这篇文章.. http://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo

于 2014-05-08T17:43:00.673 回答
6

Head First SQL是一个很好的介绍。

于 2008-12-18T12:46:48.280 回答
2

在我看来,这些问题需要来自不同领域的不同知识。

  1. 您只是无法提前知道要构建“哪些”表,您必须知道要解决的问题并相应地设计架构;
  2. 这是数据库设计决策和您的数据库供应商自定义功能的混合(即您应该检查您的 (r)dbms 的文档并最终学习一些扩展的“提示和技巧”),您的 dbms 的配置对于扩展(复制、数据分区等);
  3. 同样,几乎每个 rdbms 都带有 SQL 语言的特定“方言”,因此如果您想要高效的查询,您必须学习该特定方言 --btw。很可能编写优雅的查询也很有效是一件大事:优雅和效率经常是相互冲突的目标——

也就是说,也许你想读一些书,我个人在我的数据库大学课程中使用过这本书(找到了一本不错的书,但我没有读过这个领域的其他书,所以我的建议是查看一些数据库设计方面的好书)。

于 2008-12-18T10:57:49.967 回答
2

我已经有一段时间没有阅读它了(所以,我不确定其中有多少仍然相关),但我记得 Joe Celko 的 Smarties 的 SQL 这本书提供了很多关于编写优雅、有效和高效查询的信息.

于 2008-12-18T11:46:20.820 回答