SQL数据库设计的初学者指南

时间:2008-12-18 09:47:05

标签: sql database database-design scalability

您是否了解如何设计SQL解决方案?

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

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

7 个答案:

答案 0 :(得分:58)

我从这本书开始:Jan L. Harrington的Relational Database Design Clearly Explained (The Morgan Kaufmann Series in Data Management Systems) (Paperback)并发现它非常明确且有用

当你加快速度时,这个也很好Database Systems: A Practical Approach to Design, Implementation and Management (International Computer Science Series)(平装本)

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

答案 1 :(得分:35)

我从这篇文章开始

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

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

答案 2 :(得分:28)

经验非常重要,但在表格设计方面,您可以从Hibernate和Grails等ORM如何运作中了解很多,了解他们为什么会这样做。另外:

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

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

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

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

  5. 设置您的外键。根据你的对象结构,设置相关的ON DELETE和ON MODIFY规则,或者级联或设置null(所以你只需要在对象树的'head'处删除一次,并且所有对象的子对象都得到自动删除。)

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

  7. 对于上述部分或全部内容,其他人会建议完全相反:p - 从来没有一种真正做某事的方法呃!

答案 3 :(得分:14)

答案 4 :(得分:6)

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

答案 5 :(得分:2)

这些问题在我的观点中需要来自不同领域的不同知识。

  1. 您无法事先知道要构建哪个“表”,您必须知道必须解决的问题并相应地设计架构;
  2. 这是数据库设计决策和数据库供应商自定义功能的混合(即,你应该检查你的(r)dbms的文档,并最终学习一些“扩展的技巧和窍门”),以及你的配置。 dbms对于扩展(复制,数据分区等)至关重要;
  3. 再次,几乎每个rdbms都附带了SQL语言的特定“方言”,所以如果你想要有效的查询,你必须学习特定的方言--btw。很可能写出优雅的查询,这也是有效的:优雅和效率往往是相互冲突的目标 -
  4. 那就是说,也许你想读一些书,我个人在我的数据库大学课程中使用过this book(并找到了一个不错的书,但是我还没有读过这个领域的其他书籍,所以我的建议是检查数据库设计中的一些好书。)

答案 6 :(得分:2)

我阅读它已经有一段时间了(所以,我不确定它有多少仍然相关),但我的回忆是Joe Celko的SQL for Smarties书提供了大量关于写作优雅,有效的信息,高效的查询。