Answers:
我从这本书开始:Jan L. Harrington的《清楚地解释了关系数据库设计》(数据管理系统中的Morgan Kaufmann系列)(平装书),并且发现它非常清楚并且很有帮助
而且当您加快速度时,这也是一个很好的选择数据库系统:一种设计,实现和管理的实用方法(国际计算机科学丛书)(平装)
我认为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-从来没有一种真正的做某事的方法。
explain analyze
如果索引有好处,则应使用它们进行测试。
在我看来,这些问题需要来自不同领域的不同知识。
就是说,也许您想阅读一些书,我个人是在datbase大学课程中使用过这本书的(并找到了不错的书,但是我还没读过该领域的其他书,所以我的建议是查阅一些数据库设计方面的好书)。
自阅读以来已经有一段时间了(因此,我不确定其中有多少内容还是相关的),但我的回忆是Joe Celko的《 SQL for Smarties》一书提供了大量有关编写优雅,有效和高效查询的信息。 。