您是否了解如何设计SQL解决方案的良好来源?
除了基本的语言语法,我正在寻找帮助我理解的东西:
要构建哪些表以及如何链接它们
如何设计不同规模(小客户端APP到庞大的分布式网站)
如何编写有效/高效/优雅的SQL查询
我真的很喜欢这篇文章.. http://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo
经验非常重要,但在桌面设计方面,您可以从Hibernate和Grails等ORM如何运作中了解很多,了解他们为什么要这样做 . 此外:
将不同类型的数据分开 - 例如,不要在订单表中存储地址,链接到单独地址表中的地址 .
我个人喜欢在每个表上都有一个整数或长代理键(它保存数据,而不是那些将不同表连接在一起的数据,例如,m:n关系),这是主键 .
我也喜欢创建和修改时间戳列 .
确保在任何查询中执行“column = val”的每一列都有索引 . 也许不是世界上数据类型最完美的索引,但至少是一个索引 .
设置外键 . 根据你的对象结构,设置相关的ON DELETE和ON MODIFY规则,或者级联或设置null(所以你只需要在对象树的'head'处删除一次,并且所有对象的子对象都得到自动删除) .
如果要模块化代码,可能需要模块化数据库模式 - 例如,这是“客户”区域,这是“订单”区域,这是“产品”区域,并使用加入/链接它们之间的表,即使它们是1:n关系,也可能复制重要信息(即将产品名称,代码,价格复制到order_details表中) . 阅读规范化 .
其他人会为上面的部分或全部建议完全相反:p - 从来没有一种真正做某事的方法呃!
我从这本书开始: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和数据库设计是 different (但是互补的)技能 .
我读了它已经有一段时间了(所以,我不确定它有多少仍然相关),但我的回忆是Joe Celko的SQL for Smarties一书提供了大量关于编写优雅,有效和高效查询的信息 .
Head First SQL是一个很棒的介绍 .
我从这篇文章开始
http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html
与阅读整本书相比,它非常简洁,它很好地解释了数据库设计(规范化,关系类型)的基础知识 .
这些问题在我的观点中需要来自不同领域的不同知识 .
你事先无法知道"which"表构建,你必须知道你必须解决的问题并相应地设计架构;
这是数据库设计决策和数据库供应商自定义功能的混合(即,您应该检查(r)dbms的文档并最终学习一些"tips & tricks"进行扩展),dbms的配置对于扩展(复制)也是至关重要的,数据分区等);
,几乎每个rdbms都附带一个特定的"dialect"的SQL语言,所以如果你想要有效的查询,你必须学习特定的方言--btw . 很可能写出优雅的查询,这也是一个很有效的问题:优雅和效率往往是相互冲突的目标 -
也就是说,也许你想阅读一些书籍,我个人在我的数据库大学课程中使用了this book(并找到了一个不错的书,但是我没有读过这个领域的其他书籍,所以我的建议是检查一些数据库设计的好书) .
7 回答
我真的很喜欢这篇文章.. http://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo
经验非常重要,但在桌面设计方面,您可以从Hibernate和Grails等ORM如何运作中了解很多,了解他们为什么要这样做 . 此外:
将不同类型的数据分开 - 例如,不要在订单表中存储地址,链接到单独地址表中的地址 .
我个人喜欢在每个表上都有一个整数或长代理键(它保存数据,而不是那些将不同表连接在一起的数据,例如,m:n关系),这是主键 .
我也喜欢创建和修改时间戳列 .
确保在任何查询中执行“column = val”的每一列都有索引 . 也许不是世界上数据类型最完美的索引,但至少是一个索引 .
设置外键 . 根据你的对象结构,设置相关的ON DELETE和ON MODIFY规则,或者级联或设置null(所以你只需要在对象树的'head'处删除一次,并且所有对象的子对象都得到自动删除) .
如果要模块化代码,可能需要模块化数据库模式 - 例如,这是“客户”区域,这是“订单”区域,这是“产品”区域,并使用加入/链接它们之间的表,即使它们是1:n关系,也可能复制重要信息(即将产品名称,代码,价格复制到order_details表中) . 阅读规范化 .
其他人会为上面的部分或全部建议完全相反:p - 从来没有一种真正做某事的方法呃!
我从这本书开始: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和数据库设计是 different (但是互补的)技能 .
我读了它已经有一段时间了(所以,我不确定它有多少仍然相关),但我的回忆是Joe Celko的SQL for Smarties一书提供了大量关于编写优雅,有效和高效查询的信息 .
Head First SQL是一个很棒的介绍 .
我从这篇文章开始
http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html
与阅读整本书相比,它非常简洁,它很好地解释了数据库设计(规范化,关系类型)的基础知识 .
这些问题在我的观点中需要来自不同领域的不同知识 .
你事先无法知道"which"表构建,你必须知道你必须解决的问题并相应地设计架构;
这是数据库设计决策和数据库供应商自定义功能的混合(即,您应该检查(r)dbms的文档并最终学习一些"tips & tricks"进行扩展),dbms的配置对于扩展(复制)也是至关重要的,数据分区等);
,几乎每个rdbms都附带一个特定的"dialect"的SQL语言,所以如果你想要有效的查询,你必须学习特定的方言--btw . 很可能写出优雅的查询,这也是一个很有效的问题:优雅和效率往往是相互冲突的目标 -
也就是说,也许你想阅读一些书籍,我个人在我的数据库大学课程中使用了this book(并找到了一个不错的书,但是我没有读过这个领域的其他书籍,所以我的建议是检查一些数据库设计的好书) .