出版时间:2009-11 出版社:人民邮电出版社 作者:Louis Davidson,Kevin Kline,Kurt Windisch,Scott Klein 页数:560 字数:1040000 译者:程桦,张绪业
Tag标签:无
前言
数据库设计是Louis和我都热衷的事情。今年秋季,我将幸运地和我的朋友Louis Davidson登上同一个舞台。我们将在DevLink会议上演讲,地点是Louis的家乡Nashville,然后,在西雅图的PASS上我们也将同台演讲。在这两次演讲中,我们都将针对数据库设计这个题目开展讨论和辩论,并探讨对以数据为中心的应用来说数据库设计有多关键。数据库设计是门科学也是门艺术。规范化应该说是门科学,而确定实体的范围则是一门艺术,需要具有与各种数据库打交道的经验才能学到手。优雅的解决方案都有一种简单的美。Louis不止是位作者和数据库设计人员,也是一位大师级技师。在本书中,你会发现字里行间都隐藏着作者的呼吁——改善你的技能,精心雕刻出能够经受时间考验的数据库,创造一个能让开发人员充分施展拳脚的、虚拟的数据世界。数据库设计是每个以数据为中心的应用的基石。一个优雅的数据库设计使得数据一目了然、容易查询,并且使用有效的、基于集的查询将开发人员武装起来,使他们获得成功。但是,如果数据库设计就很糟糕,则无论多少代码也无法补偿,也无法为数据库加上缺失的功能。对任何以数据为中心的应用来说,没有什么角色比数据建模人员这个角色更为重要。用户界面换来换去,但是,即使经历了好几代应用编程语言,数据仍然存在着。数据库架构上犯下的错误迟早会被未来的程序员诅咒,即使他现在还未出生,即使他用的是现在还没发明的语言和工具。在我的好朋友Louis的指导下,多花一点时间来润色你的数据库设计,绝对是件值得的事。因此,欢迎你阅读本书,这是Louis针对软件世界最重大的工作所写的战地指南的第三版。能够为本书作序我感到无比愉快。
内容概要
本书深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——SQL Server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在SQL Server 2008上真正实现数据库的过程;第三部分深入探讨了SQL Server若干方面的技术细节,如数据保护、索引、并发访问等。通过将理论融入数据库实践,清晰地讲解了关系型数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了SQL Server 2008的技术细节。 本书浓缩了作者作为SQL Server数据库架构师多年来丰富的实践经验,适合各类数据库开发和管理人员学习参考。
作者简介
作者:(美国)戴维森(Louis Davidson) (美国)Kevin Kline (美国)Scott Klein 等 译者:程桦 张绪业 等Louis Davidson,作为企业数据库开发人员和架构师,他拥有超过15年的工作经验。目前他是田纳西州Nashville的Christian广播网络和NorthStar工作室的数据架构师。对于Louis而言,他全部的职业经验几乎都与微软的SQL Server有关,从早期版本一直到当前最新版本的Beta版。Louis是一本讲数据库设计的书的4个版本的主要作者。Louis主要的兴趣领域是数据库架构和用T-SQL编码,并且,他设计过许多数据库,在这许多年中编写过数以千计的存储过程和触发器。关于特约作者Kevin Kline,是Quest软件公司SQL Server解决方案的技术战略经理。Kevin从2004年开始就是微软的SQL Server MVP,他是国际SQL Server专家联盟(PASS)创立委员会的成员和上一届总裁。他独自写作或参与合著了好几本书,包括SQLin a Nutshell(O'Reily,2004)、Pro SQL Server 2005 Database Design andOptimization(hpress,2006)以及Database BenchmarMng:Practical Methodsfo,Oracle & SQL Server(Rampant,2007)。Kevin给SQLServerMagazine和DatabaseTrends and Applications杂志供稿,他的博客可以在SQLBlog.com和SQLMag.com上找到。在世界范围内的会议上,比如微软的Tech Ed、PASS社区峰会、微软IT论坛、DevTeach以及SQL Connections,Kevin也是人气最高的演讲者。从1986年开始Kevin就活跃在IT工业中。Scott Klein,是一位独立咨询师,对SQL Server、.NET和XML相关的所有知识都充满热情。他是几本书的作者,这包括ProfessionalSQLServer2005XML(Wrox,2006)和ProfessionalLINQ(Wrox,2008),他还为SQL PASS Community Connector写每两周一次的特辑文章。他也为好几个网站供稿,这包括Wrox(http:llwww.wrox.com)和TopXML(http://www.topxml.com)。他经常同佛罗里达附近的SQLServer和.NET用户群体交流。Scott在佛罗里达的Wellington,当他不坐在计算机前时,你会发现他和自己的家人在一起,或者骑着他的雅马哈摩托车轰鸣在当地的摩托车越野赛赛道上。你可以通过ScottKlein@SqlXml.com联系他。Kurt Windisch,是Levi,Ray,and Shoup,Inc.公司内部IT部门的应用程序监管,该公司是一家技术方案的全球供应商,总部位于伊利诺伊州的springfield。Kurt在ITI业中的经验超过了17年。他在SQLServer专家联盟的董事会中服务了5年,为很多SQL Server杂志供过稿,也在讨论SQL Server数据库编程的国际会议上发过言。
书籍目录
第1章 数据库概念简介 1.1 数据库设计阶段 1.1.1 概念阶段 1.1.2 逻辑阶段 1.1.3 实现阶段 1.1.4 物理阶段 1.2 关系数据结构 1.2.1 数据库和模式 1.2.2 表、行和列 1.2.3 信息原则 1.2.4 域 1.2.5 元数据 1.2.6 键 1.2.7 未显式赋值的项(NULL) 1.3 实体之间的关系 1.3.1 二元关系 1.3.2 非二元关系 1.4 数据访问语言(SQL) 1.5 理解依赖性 1.5.1 函数依赖性 1.5.2 判定 1.6 总结第2章 数据建模语言 2.1 数据建模介绍 2.2 实体 2.3 属性 2.3.1 主键 2.3.2 替代键 2.3.3 外键 2.3.4 域 2.3.5 命名 2.4 关系 2.4.1 识别性关系 2.4.2 非识别性关系 2.4.3 角色名字 2.4.4 关系基数 2.4.5 动词短语(关系名字) 2.5 描述信息 2.6 其他建模方法 2.6.1 信息工程 2.6.2 Chen ERD 2.6.3 Visio 2.6.4 Management Studio数据库关系图 2.7 最佳实践 2.8 总结第3章 概念阶段数据建模 3.1 理解需求 3.2 文档化过程 3.3 需求收集 3.3.1 客户访谈 3.3.2 要回答的问题 3.3.3 现存的系统和原型 3.3.4 其他类型的文档 3.4 识别对象和过程 3.4.1 识别实体 3.4.2 实体间关系 3.4.3 识别属性和域 3.5 识别业务规则和业务过程 3.5.1 识别业务规则 3.5.2 识别基础业务过程 3.6 完成概念模型 3.6.1 识别明显的、额外的数据需求 3.6.2 和客户一起评审 3.6.3 重复以上步骤直到客户同意你的模型 3.7 最佳实践 3.8 总结第4章 规范化过程 4.1 为什么要规范化 4.1.1 消灭重复数据 4.1.2 避免编写不必要的代码 4.1.3 给表瘦身 4.1.4 最大化聚集索引的使用 4.1.5 降低每张表中索引的数量 4.2 规范化应该走多远 4.3 规范化过程 4.4 实体和属性的形式:第一范式 4.4.1 所有属性必须是原子的 4.4.2 实体的所有实例必须包含相同数量的值 4.4.3 实体中出现的所有实体类型都必须不同 4.4.4 第一范式所避免的不规则编程 4.4.5 当前设计不符合第一范式的线索 4.5 属性间的关系 4.5.1 第二范式 4.5.2 第三范式 4.5.3 Boyce-Codd范式 4.6 实体中的多值依赖 4.6.1 第四范式 4.6.2 第五范式 4.7 非规范化 4.8 最佳实践 4.9 总结 4.10 额外的例子 4.11 本书迄今为止所讲述的故事第5章 实现基础的表结构 5.1 评审逻辑设计 5.2 变换设计 5.2.1 选择名字 5.2.2 处理子类型 5.2.3 决定树的实现方式 5.2.4 选择键的实现方式 5.2.5 决定域的实现方式 5.2.6 设置模式 5.2.7 评审“最终的”实现模型 5.3 实现设计 5.3.1 创建基本表结构 5.3.2 添加唯一性约束 5.3.3 构建默认约束 5.3.4 添加关系(外键) 5.3.5 处理排序规则和排序 5.3.6 计算列 5.3.7 实现用户定义的数据类型 5.3.8 文档化你的数据库 5.3.9 处理依赖信息 5.4 最佳实践 5.5 总结第6章 保护数据的完整性 6.1 最佳实践 6.2 自动数据保护 6.2.1 声明性数据保护 6.2.2 基本语法 6.2.3 基于简单表达式的CHECK约束 6.2.4 基于函数的CHECK约束 6.2.5 约束引起的错误 6.2.6 DML触发器 6.2.7 处理来自触发器和约束的错误 6.3 手动数据保护 6.4 更多最佳实践 6.5 总结第7章 模式与查询技术 7.1 预计算值 7.1.1 序列表 7.1.2 日期计算 7.2 二进制大型对象(BLOB) 7.3 存储用户自定义数据 7.3.1 一长串通用列 7.3.2 实体-属性-值(EAV) 7.3.3 往表中增加列 7.4 通用实现对象 7.5 反模式 7.5.1 多用途键域 7.5.2 通用键引用 7.5.3 对非结构化数据的过度使用 7.6 总结 7.7 回顾与展望第8章 数据访问安全 8.1 安全主体与安全对象 8.2 数据库安全概述 8.2.1 模拟 8.2.2 权限 8.2.3 控制对象访问 8.2.4 角色 8.2.5 模式 8.3 通过T-SQL编程对象控制对象访问 8.3.1 存储过程和标量函数 8.3.2 对象内模拟 8.3.3 跨数据库边界 8.3.4 不同的服务器(分布式查询) 8.4 视图与表值函数 8.4.1 一般用法 8.4.2 使用视图实现可配置的行级安全 8.5 数据混淆 8.6 监视与审核 8.6.1 服务器与数据库审核 8.6.2 使用DML触发器查看表的变更历史 8.6.3 DDL触发器 8.6.4 分析器日志 8.7 最佳实践 8.8 总结第9章 表结构与索引 9.1 数据库物理结构 9.1.1 文件与文件组 9.1.2 分区与页 9.1.3 页中的数据 9.1.4 分区 9.2 索引概览 9.3 基本索引结构 9.4 索引类型 9.4.1 聚集索引 9.4.2 非聚集索引 9.4.3 聚集表上的非聚集索引 9.5 索引创建的基本方法 9.6 基本的索引使用模式 9.6.1 使用聚集索引 9.6.2 使用非聚集索引 9.6.3 使用唯一索引 9.7 高级的索引使用案例 9.7.1 外键索引 9.7.2 索引视图 9.8 最佳实践 9.9 总结第10章 并发编程 10.1 什么是并发 10.2 查询优化的基础知识 10.3 操作系统与硬件因素 10.4 事务 10.4.1 事务语法 10.4.2 已编译的SQL Server代码 10.5 SQL Server并发控制 10.5.1 锁 10.5.2 隔离级别 10.6 完整性与并发性编程 10.6.1 悲观锁定 10.6.2 实现单线程代码块 10.6.3 乐观锁定 10.6.4 基于行的锁定 10.6.5 逻辑工作单元 10.7 最佳实践 10.8 总结第11章 数据访问策略 11.1 即席SQL 11.1.1 优点 11.1.2 缺陷 11.2 存储过程 11.2.1 封装性 11.2.2 动态存储过程 11.2.3 安全性 11.2.4 性能 11.2.5 缺陷 11.2.6 观点 11.3 T-SQL与CLR(公共语言运行时) 11.3.1 选择T-SQL的准则 11.3.2 选择.NET的准则 11.3.3 CLR对象类型 11.4 最佳实践 11.5 总结附录A Codd的RDBMS十二法则附录B 标量数据类型参考索引
章节摘录
插图:第1章 数据库概念简介这下她明白了,敌人如魔鬼般的狡诈,正在于给谎言掺入一点真话,如此一来,谎言就更以假乱真。——《纳尼亚传奇:最后的战役》,C.S.Lewis著作为数据架构师的职业生涯中,从最开始到昨天为止(不管你什么时候看到这些句子,我这句话基本上都不可能会变化),我无数次遭遇一个完全难以克服的现实。向一个以墙上的钟点考评所有项目的管理体系兜售“做对事情”的概念从来都不轻松。不光如此,通常情况下,实现功能的程序员人数往往比做数据库的多若干倍,他们边等着用数据库,边对管理层抱怨说,不到数据库设计完成或至少开始实现,他们什么事都干不了。如果这还不够,现在介绍一下项目组的思维定势,具体用词可能略有偏差:“数据库设计不那么重要。”这话往往并非明确地用这些词说出来(虽然也确实有这样说的时候)。一般说来,在人们大谈用户界面(UI)应该如何显示某个东西,以及某按钮应该放到哪儿的时候,类似的话就混杂于其中。系统设计从一开始就让人感觉像是追求“照片般真实”的艺术家在画一幅画,而不是在进行一个需要遵循坚实工程实践的项目,先回答“需要做什么”再回答“如何做''的问题。更糟糕的是,由于数据库是几乎所有软件项目的骨干成分,这使得情况更加复杂且不易看清,往往快到项目开发阶段结束时,事情才暴露出狰狞的真面目。如果你在参与数据库设计,那么非常重要的是,你需要知道如何回答一个基本问题:“为什么?”这样来看问题:你愿意开车在一座由某位不懂物理的工程师设计出来的桥上行驶吗?或者,你愿意乘坐一架由某位不懂飞行基本原理的人士所设计出来的飞机吗?听起来非常荒谬,是不是?那么,你愿意把自己的重要数据存放在一个由某位不懂数据库设计基本原理的人士所设计出来的数据库中吗?本书的前4章致力于讨论关系数据库设计的不同阶段,以及如何有效地执行每个阶段的工作,从而能够获得一个良好的最终设计,既能满足业务需求又能保证数据库中数据的完整性。然而,在满腔热情地投入设计过程之前,需要探讨几个核心的关系数据库概念。因此,本章讨论如下主题。
媒体关注与评论
“跟本书的2005版一样,我认为Louis的这本书写得非常好,信息量极其丰富而且实践性强。阅读过程中,你会觉得是在跟作者讨论问题。我喜欢这本书,还因为它有自己的观点,而非从在线图书中照搬过来……” —— Amazon读者评论
编辑推荐
《SQL Server 2008数据库设计与实现》:资深数据库专家的心血力作,SQL Server设计思想的独到解析,关系数据库实现的通关宝典。《SQL Server 2008数据库设计与实现》是关系型数据库设计与开发方面一本不可多得的好书。作者十年磨一剑,最早以SQL Server 2000为蓝本。其后经历了2005,再到2008,作品一版再版。不断推陈出新,内容也日益精炼、翔实,成为一本深得读者好评的经典著作。《SQL Server 2008数据库设计与实现》虽然着眼于SQL Server 2008,但体现的是关系数据库设计的思想与理念。从业务人员可以理解的逻辑设计,到利用SQL Server进行物理实现的方方面面,《SQL Server 2008数据库设计与实现》贯穿始终的是融会关系数据库思想、设计高效率可伸缩的数据库。基于对关系数据库设计开发的“最佳实践”及相应理论的透彻理解,作者还阐述了怎样使用SQL Server做出优雅的设计,为充分利用宝贵的业务数据打下坚实的基础。通观全书,其写作思路清晰,观点简明实用,常能一针见血地指出要点。《SQL Server 2008数据库设计与实现》是SQL Server开发者的必读书,对其他数据库开发者也有借鉴意义。对初级程序员来说,《SQL Server 2008数据库设计与实现》是数据库设计基础的完备教程。有经验的开发人员也可从《SQL Server 2008数据库设计与实现》中学到很多数据库开发的实用技巧。《SQL Server 2008数据库设计与实现》要点:●如何借助面谈和客户文档,为客户数据建立概念模型。●如何对数据模型应用范式,以增强可伸缩性,并长期使用宝贵的数据。●如何将概念模型转化为高性能的关系数据库。●如何创建高效的索引以优化查询的性能。●如何充分利用SQL Sewer的新特性,如空间数据类型、XML支持、透明数据加密等。
图书封面
图书标签Tags
无
评论、评分、阅读与下载
SQL Server 2008数据库设计与实现 PDF格式下载