《数据库设计入门经典》,如今学习的是这本书,虽然之前就看过相似的书,可能因为以前经验不足,书中说的某些东西只消化了一部分,如今重温一边好懂多了。因此说读第一遍读不懂没关系,过个一年半载的再来读,仍是会读不懂的,哈哈。java
就是这本了。数据库
数据库模型和数据库之间有什么区别?编程
数据库将服务于某类型的应用程序。不一样类型的数据库模型支持不一样类型的应用程序。安全
联机事务处理(Online Transaction Processing,OLTP)数据库一般是专门的、高并发性的(可共享的)体系结构,它须要快速访问很是少许的数据。网络
文件系统并发
层次结构数据库模型数据库设计
网络数据库模型高并发
关系数据库模型工具
对象数据库模型:相比于关系数据库模型,对象数据库模型能够解决一些更加难以理解的复杂问题,好比消除了类型和多对多关系替换表的需求。对象数据库模型的另外一个优势是管理和迎合很是复杂的应用程序和数据库模型的内在能力。这是由于对象方法学的基本原则:很是复杂的元素能够分解为最基本的部分,容许对这些基本部分进行显式访问和执行这些基本部分。在书中介绍关系型数据库模型时讨论对象数据库模型很是重要,由于许多现代的应用程序都是使用以对象方法学为基础的SDK(例如java)编写的。对象编程应用程序和关系数据之间一个最重要的关键点是:两种结构化类型(对象和关系)之间的映射过程的性能。性能
在检索多个数据项的时候,对象数据库模型的执行性能比较差。另外一个方面,关系型数据最适合检索数据组,但也能够有效地访问惟一的数据项。
数据库的类型:
事务的:对数据库进行少许改动(小型事务)
决策支持系统(Decision support system,DSS):数据仓库数据库通常不灵活,由于它们可能极其庞大
混合的:对中小型公司是更为合适的选择,由于仅仅有一个而不是两个数据库,更少的机器,更少的软件许可,更少的人
对于数据库模型,必须在构建以前设计它,而后开始用数据填充它,而且将它关联到应用程序。
数据库的设计很是重要,由于根据数据库模型设计编写的全部应用程序都是彻底与底层数据库的结构相关的。若是必须在后面的阶段中修改数据库模型,则可能必须修改基于该数据库模型构造的全部内容,也可能须要彻底重写。
具备良好结构的数据库目标——具备良好结构的数据库模型是简单的、易于阅读的、而且易于理解的数据库模型。
数据完整性——完整性是数据库模型中的一组规则,用于确保数据库中的数据不会丢失。
支持有计划的查询以及ad-hoc或无计划的查询——ad-hoc查询越少,固然越好。在某些环境中(例如在很是高并发性的OLTP数据库中)可能必须彻底禁止ad-hoc查询,或者转移到更适当的数据仓库平台。
还有一些小的要点:
ad-hoc查询可能形成严重的性能问题。须要毫秒响应时间的面向客户的应用程序不会与ad-hoc查询很好的相处。
支持业务目标——高度规范化的表结构不必定直接表明业务结构,非规范化的、数据仓库的、事实-纬度的结构可能更适合于操做性业务。
为任何须须的修改操做提供适当的性能
数据库模型中的每一个表应该更适合表明某个题目或主题——不要过多地设计数据库模型,不要建立太多的表。OLTP数据库可能由于更多的细节和更多的表而变得庞大;将数据分到太多的表中,数据仓库可能崩溃。
将来增加必须老是要认真考虑的事项——一些数据库可能以没法估量的速度增加。
数据库设计的方法
如何着手设计数据库模型?
需求分析——收集以下相关信息:数据的性质、必需的特性和任何特别的需求,例如指望的输出响应。
概念设计——开始使用图形工具绘制漂亮的图形:实体关系图(ERD)。这个步骤包括建立表、表中字段以及表之间的关系。这个步骤也包括了规范化。
逻辑设计——建立数据库语言命令以生成表定义。
物理设计——调整数据库语言命令以针对表的底层物理属性修改数据库模型。
调整阶段——这个步骤包括了多项,例如适当地创建索引、进一步的规范化、甚至是反规范化、安全特性、以及前面步骤中没有包括的其余内容。
这些单独的步骤是可互换的、可重复的、迭代的、而且是真正可以作任何事情的。
应该坚持的惟一通用事实是:在构建元数据表建立代码以前应该很好地绘制ERD并构建表,而且在实际实现以前应进行可视的设计。