SQL数据库设计初学者指南[关闭]


127

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

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

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

Answers:


60

我从这本书开始:Jan L. Harrington的《清楚地解释了关系数据库设计》(数据管理系统中的Morgan Kaufmann系列)(平装书),并且发现它非常清楚并且很有帮助

而且当您加快速度时,这也是一个很好的选择数据库系统:一种设计,实现和管理的实用方法(国际计算机科学丛书)(平装)

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


1
开始数据库设计:从新手到专业人员-Clare Churcher?
狂热的人

40

我从这篇文章开始

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

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


喜欢这个指南,谢谢。
MsO

此答案中的链接不再起作用。
Grizzly Peak Software

1
看来链接再次正常工作。
user8576017

1
链接不再有效
-jat255


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-从来没有一种真正的做某事的方法。


1
ORM,您的所有观点都是反数据库的
PerformanceDBA

1
添加索引并不总是意味着更高的速度。有时,它们实际上会使查询变慢。它实际上取决于查询,explain analyze如果索引有好处,则应使用它们进行测试。
ArashM



2

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

  1. 您只是事先不知道要构建“哪些”表,您必须知道要解决的问题并相应地设计模式。
  2. 这是数据库设计决策和数据库供应商自定义功能的结合(即,您应该检查(r)dbms的文档,并最终了解一些“技巧和窍门”以进行扩展),而且dbms的配置对于扩展(复制,数据分区等);
  3. 同样,几乎每个rdbms都带有特定的SQL语言“方言”,因此,如果要进行有效的查询,则必须学习该特定的方言--btw。很可能写出优雅的查询也很有效,这很重要:优雅和效率经常是相互冲突的目标-

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


2

自阅读以来已经有一段时间了(因此,我不确定其中有多少内容还是相关的),但我的回忆是Joe Celko的《 SQL for Smarties》一书提供了大量有关编写优雅,有效和高效查询的信息。 。


2010年第四版可能是最新的
rleir

1
Celko的书是对错误的研究,并进一步提出了在代码中实施应在数据库中实施的概念。
PerformanceDBA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.