【问题标题】:A beginner's guide to SQL database design [closed]SQL 数据库设计初学者指南 [关闭]
【发布时间】:2010-09-27 12:03:40
【问题描述】:

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

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

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

【问题讨论】:

标签: sql database database-design scalability


【解决方案1】:

我从这本书开始: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 和数据库设计是不同的(但互补的)技能。

【讨论】:

  • 开始数据库设计:从新手到专业人士 - Clare Churcher?
【解决方案2】:

我从这篇文章开始

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

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

【讨论】:

【解决方案3】:

经验很重要,但在表设计方面,您可以从 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 - 从来没有一种真正的方式来做一些事情!

【讨论】:

  • ORM,你所有的点都是反数据库
  • 添加索引并不总是意味着更快的速度。有时它们实际上会使查询变慢。这实际上取决于查询,如果索引有好处,您应该使用explain analyze 对其进行测试。
【解决方案4】:
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

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

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 2010 年第四版可能是最新的
      • Celko 书是对错误的研究,并进一步提出了在代码中实现的概念,即应该在数据库中实现什么。
      猜你喜欢
      • 2010-09-06
      • 2012-07-20
      • 2010-09-23
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多