【SQL开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了SQL开源代码-SQL server 2005 和2008 数据建模指南 - 技术总结的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
1 / 22 2 / 22 程序员
SQL Server 数据建模指南 包括
SQL Server 2005 和2008 作者埃里克.约翰逊 约书亚.琼斯 翻译王海鹏 3 / 22 程序员
SQL Server 数据建模指南的赞扬 “埃里克和约书亚在描述数据建模的重要性和如何正确的数据建模上做了非常棒的工作。
他们使用真实世界的例子来说明许多数据库和应用程序的开发者所忽略的重要概念而不是依靠教条化的概念。
数据库初级设计者和资深的专家都很喜欢这种对话式和平易近人的写作风格。
负责设计、实施和管理数据库的读者将会从约书亚和埃里克的专家技巧中获得很大益处。
-阿尼尔.德赛 阿尼尔.德赛公司顾问 “几乎每一个IT项目都设计某种数据存储其中大多数都是关系数据库管理系统RDBMS。
这本书是为以数据为中心的读者数据建模员架构师设计师开发者等等。
作者在给我们展示如何让项目从各个方面收集需求的初始阶段到实施。
顺着过程我们学习如何处理一些真实世界的非常典型的设计问题。
“基本要求是很简单的。
就是当你老板说“我们要在你的帮助下开展一个新的项目”你会想读完这本书。
” -Ronald Landers技术顾问IT专家 “数据模型是应用程序的基础。
我非常高兴看到更多的为这个关键的阶段而写的书。
通过获得正确的优先级这本书介绍了一个平衡和使用的见解使你的
SQL Server项目有一个好的开始和长的生命周期。
-Paul NielsenSQL Server MVPSQLServerBible.com “无论对新手或者高级设计师这真是一个对数据库设计方法学的杰出介绍。
作者在讲解关系数据库模型基础和他们如何适合现在商业逻辑架构上做了非常好的工作。
这本书教给我们如何确认那些必须满足数据库要求的业务问题和解释如何从草稿中建立一个稳定的解决方案。
-Alexzander N.NepomnajashiyMicrosoft
SQL Server DBANeoSystems North-WestInc. “《一本开发者的SqlServer数据建模指南》清晰的讲解技术数据建模的概念和实践使建立数据库和数据驱动程序的任何人都容易理解这项技术。
“埃里克 约翰逊和约书华 琼斯 艺术般的结合了两人对多年数据建模科学的理解。
如果你是一个数据建模的新手或者有需要了解之二写概念这本是是为您定做的。
” -Peter VarholExecutive EditorRedmond Magazine 4 / 22 程序员
SQL Server 数据建模指南 适合
SQL Server 2005 和2008 埃里克.约翰逊 约书华.琼斯 艾迪生-韦斯利 马鞍河上游新泽西州 波士顿 印第安纳波利斯 纽约旧金山 多伦多 蒙特利尔 伦敦 慕尼黑 巴黎 马德里开普敦 悉尼 新加坡 墨西哥城 5 / 22 许多名称制造商和销售商注册为区分他们的产品而注册申请为商标专利。
当这些名称出现在这本书中而且出版社也知道这些注册商标所以名称以首字母大写或者整个名称都是大写的。
作者和出版社很注意的准备了这本书但是不会明示或者隐含为错误或者过失承担任何责任和赔偿。
没有为使用书中的信息或者程序造成的损失承担附带或者间接责任。
当批量购买或者包含电子版本或者为你的业务训练目标市场营销品牌权益自定义封面和内容特殊市场订单出版社为这本书提供优厚的折扣。
如果想获取更多信息请联系 US 政府和企业销售 800382-3419 Corpsalespearsontechgroup.com For sales outside the united sates please contact: International Sales internationlpearsoned.com 访问我们在网站infomit.com/aw 图书目录编录在美国国会图书馆 约翰逊 埃里克1978- 程序员
SQL Server 数据建模指南 覆盖 SQLServer 2005 和2008 /埃里克.约翰逊和约书华.琼斯 -1st ed。
P.CM. 包括目录. ISBN 978-0-321-49764-2PBKalk.PAPER 1
sql server 2数据库设计 3数据结构计算机科学 I琼斯.约书华 1975- II.Title QA76.9.D26J65 2008 Copyright 2008 培生教育公司 保留所有权利在美国本土印刷。
本出版物受版权保护在从出版社取得许可之前禁止任何形式的复制目录检索或者转载如电子版本手工影印录制等等。
如果想获得许可信息写信至 培生教育 权利和合约部 501博伊尔斯顿街 900栋 波士顿 Ma02116 传真617671-3447 ISBN-13:978-0-321-49764-2 ISBN-10:0-321-49764-3 文字印刷在可回收纸张在波士顿邮局 美国 马萨诸塞州 第一次印刷 2008 6月 6 / 22 为 米歇尔 和 埃文 ----------埃里克 写给我的妻子和孩子 让我有时间来工作---乔西 7 / 22 前言 XV 答谢 Xvii 关于作者 Xix 第一部分 数据建模理论。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
1 8 / 22 PREFACE 前言 作为一个数据库专家我们经常被要求进入现有环境和修复存在的数据库。
这是很经常的因为在已经交付的程序的生命周期中程序开发人员和用户经常发现性能问题。
不可避免地期望我们能施展一些魔术般的技巧让性能问题消失。
不行的是你们绝大多数都已经知道问题经常在于数据库的设计。
我们经常在会上花费几个小时来努力验证重新设计整个数据库的成本以便支持应用的实习需求以及业务的性能需求。
我们经常发现我们面临现实世界的问题比如预算资源和业务需求时间不允许完全解决一个设计不良的数据库上的所有问题。
当你发现你自己处在需要重新设计一个数据库的时候或者好一点要去从头开始设计一个新的数据库的处境的时候将会发生什么呢你知道那里有一些规则来遵循伴随着能指导你可伸缩的、功能性的设计的最好的练习。
如果不想从现在起三年内这么长时间就够了让数据库开发者和数据库管理员咒骂你的名字你就要遵循这些规则。
此外随着企业级关系关系数据管理系统的到来理解你的设计将要实施的数据库平台的输入和输出时非常重要的。
有2个原因让我们决定写这本书为每一个需要设计或者重做一个依赖于 Microsoft
SQL Server的数据模型的人提供参考。
第一即使已经有了许多的书从上到下的覆盖了关系数据库的设计也有了大量的书如何为
SQL Server优化性能和编写T-
SQL对开发者和设计者从开始到结束的伴随正确理论的融合和实践经验过程却没有任何帮助。
第二我们已经逐字逐句的看过了人们遗留下的数百个设计不良的数据库这些人既没有
SQL Server的理论背景也没有相关经验来设计一个高效的数据库模型。
有时这些数据库被良好的设计为他们曾经实施过的数据库随后他们被简单的复制和黏贴缺少更准确的术语到
SQL Server经常会造成灾难性的后果。
我们曾经想一本讨论关于
SQL Server的书籍将会对重新设计一个存在的数据库从另一个平台迁移到
SQL Server中去。
我们都详细读过软件设计和关系数据库设计应该是不分平台的。
我们不需要争论这些观点。
然而了解关系数据库管理系统将会主导你的设计是非常重要的因为会影响你计划的性能和在你的设计中你可能需要说明的缺陷。
除此之外在
SQL Server 2005的介绍中微软应用了很多能扩展
SQL Server能力超过简单主机的技术 。
虽然我们没有覆盖到扩展功能的每一点否则你考虑需要一个起动机来携带这本书我们会引用这些功能在恰当的地方给你机会学习这些功能如何帮助你。
在这本书的页面里我们希望通过完整的设计和开发流程你将会发现你需要的每一件事来帮助你所有事情从跟用户沟通设计用例开发你的数据模型来实施和确认模型拥有稳定的性能特点。
只要有可能我们就会提供 9 / 22 示例我们希望这些示例在一个方面或者另一个方面对你来说是有用的也是合适的。
在花费几个小时来开发后台和需求为我们的虚拟公司我们已经考虑关于开始我们拥有的音乐业务。
接下来让我们面对这些一行一行的读取关于对一个varchar数据类型各种不同的用途不能总是令人毛骨悚然因此我们试图添加一些轶事anecdote一些笑话和一个意译电影片段或者2个来保持这本书的活力。
写这本书是一个奇特的经历对我们2个来说学习出版过程的工作是怎样的学习对大多数读者来说更好的细节写作学习即使我们自己是最大的批评者critics 但是听到朋友的批评是很艰难的即使他们是对的但是我们很高兴他们提出批评。
ACKNOWLEDGMENT 感谢 我们一直享受训练和写作同时这本书给我们同时训练而后写作的机会。
许多漫长的夜晚和周末花费在这本书上我们也希望所有的辛勤工作创造了一个对你有用的资源库。
我们无法足够的表达出我们家人的感谢-----米歇尔Michelle和Evan埃文和丽萨Lisa 、布雷登Breydon、悉尼Sydney.他们一直非常支持和理解我们在整个过程中虽然没有我们的陪伴。
我们非常爱你们。
我们也想感谢Addison-Wesley 出版社的团队琼-默里 和金-Boedigheimer。
我们在这本书之前从未写过书琼非常信任我们给予了我们机会。
谢谢在整个过程中指导我们即使在事情变得棘手的时候也同我们一块工作。
非常感谢Embarcadero embarcadero.com 让我们在创建模型时可以使用ERStudio 的副本这些模型你将会在这本书中看到。
我们也想感谢微软创造了
SQL Server和提供关于主机数据库的在这样一个稳定的平台上的IT社区。
最后我们将会我们将会犯错如果我们没有感谢你读者们。
没有你们那么就没有这本书。
10 / 22 ABOUT THE AUTHORS 关于作者 埃里克-约翰逊Eric Johnson Microsoft
SQL MVP 是Consortio Services co-founder共同创建者同时是高级数据库技术顾问。
他有多样的技术背景一系列的操作系统和硬件为专门的程序和开发。
因为IT是一条支持业务的过程埃里克也取得了一个MBA一切的一切他有10年的IT经验大多数时间同MICROSFOT
SQL Server 打交道。
埃里克已经管理和设计了所有形状和大小的数据库。
他已经发布了众多的
SQL Server 训练课程和网络视频同时还有在国家技术会议上的演讲。
最近他出席了TechMenter 关于
SQL Server 2005 复制报表服务和整合服务。
除此之外他也活跃在本地
SQL Server社区以主席的身份服务于Colorado Springs
SQL Server Users Group。
他同时也是CS Techcast 的联合主机一个每周为IT专业发布广播在www.cstechcast.com。
你能在www.consortioservices.com/blog找到埃里克的博客。
约书华.琼斯 MCTSSQL Server 2005MCITPdatabase administrator在consortio 服务在colorado springs。
在那里他提供培训管理分析和用
SQL Server2000为客户设计和2005。
在他作为IT专家的7年里他在许多地方的信息技术工作包括windows桌面支持Window 2000 and 2005 服务器设施设计和支持ADDNSMS Exchange电话交换技术支持网络支持。
约书亚已经在各种PASS 举办活动关于
SQL Server 的主体比如64位
SQL Server的实施报表服务管理和性能优化。
他也是一个CS 技术广播的联合主持人每周在www.cstechcast.com 上的IT专业广播。
11 / 22 第一部分 数据建模理论 第一章 数据建模概述 第二章 在逻辑数据模型中使用元素。
第三章 数据模型的物理元素。
第四章 规范一个数据模型 12 / 22 Chapter one 第一章 Data Modeling overview 数据建模概述 被叫做数据建模的东西确切来说是什么呢简单的说数据建模是搞清楚如何存储数据信息到一个逻辑结构的计算机数据库的过程。
这可能听起来容易但是很多时间花费在开发完善的数据模型。
数据建模是一个技术过程其中关联着理解和映射业务信息到可以最终存储到数据库中的逻辑对象。
这意味着一个数据建模者必须身兼数职来有效的做这项工作。
你不只是理解模型建立的过程你也要时一个数据侦探。
你必须要擅长问问题和发现什么才是真的对你的客户重要。
在数据建模里在许多IT领域客户知道他们想知道的但是他们不总是知道他们需要什么。
你的工作是找出他们需要什么。
假设你在处理Tom的事他是一家电器经销商的项目经理。
Tom理解他公司从生产厂家订购电冰箱洗碗机和同类型的电器随后履行订单并把这些电器卖给他的客户零售商店。
Tom不知道的是如何获得信息建模和最终存储到一个数据库中以便极大地帮助公司做出决定或者控制一个过程。
另外搞清楚什么信息你的客户关心什么信息和整合信息进数据库。
你必须找出客户打算使用的信息。
这是为了历史性的原因或者公司将会使用这些数据在日常操作里或者将只会被用来输出报表或者一个程序定期来巧妙的处理数据如果这些还不够你最终要考虑添加您的数据模型到一个物理数据库。
当面临数据库管理产品的时候市场上有很多选择。
这些产品是相似的他们允许你存储、安全和使用数据库里的信息然而每件产品通过自己的方式实现功能特征因此你必须充分利用好这些功能来提供能充分满足客户需要的解决方案。
我们在这本书里的目标是给你所需要来设计和实施数据库模型的知识和技能。
在数据库理论方面有大量的知识所以那不是我们的重点相反我们想看看真实世界的情景并且聚焦你的建模工作为
SQL Server2008优化您的设计我们讨论的概念和主题是适用于旧的
SQL Server 版本但是一些特性只是在
SQL Serve2008上可用的。
在遇到这个问题的地方我们将会支持主要的不同点或者至少让你知道讨论的主题只适用于
SQL Server 2008. 在我们走远之前会有很多术语你应当熟悉的。
你或许已经知道了这其中许多的术语。
但是我们想确认我们在同一 Databases 13 / 22 数据库 什么是数据库简单的答案是一个数据库是任何能包含信息的东西。
一个数据库是逻辑的或者物理的或者兼而有之。
你将会听到许多公司提及任何内部信息作为公司数据库。
实际上我曾经同一个矿山的管理人员讨论一个餐巾纸是否能是一个数据库。
如果你考虑这些我能的确写一些东西在一个餐巾纸上它也能作为一个记录。
因为它存储着数据你能称它为数据库。
因此我们为什么不存储我们所有的重要信息在餐巾纸上主要原因是我们不想丢失一个客户的记录在洗衣机里。
严肃地说当我们存储数据时我们需要一个能存储信息在一个逻辑方式和允许数据检索的数据库。
当你考虑一个数据库你应当真的考虑一些事情通过表它由行和列组成的。
每个表包含从属于单个主题的信息并且每行包含关于那个主题下单个示例数据。
图形1.1 演示了一个简单的包含雇员和他们电脑的信息的逻辑模型。
图1.1 一个简单关系数据库包含雇员和电脑信息。
雇员表包含关于雇员的信息并且每一行包含单个雇员所有的信息。
同样列中为每一行包含相同数据类型的数据。
比如电话号码列只包含雇员的电话号码。
许多数据库包含其他对象像是视图存储过程函数和约束等等我们以后再深入到这些细节。
采取更进一步的定义我们需要看到关系数据库。
一个关系数据库利用数据库中最常见的数据库类型其中一些表关联到另一个表同样地。
看着我们的雇员表我们可能也想追踪哪些电脑给予了哪些雇员。
在这种情况下我们应该有一个电脑表关联到雇员表如同在声明中“一个雇员拥有或者有一台电脑”。
曾经我们开始讨论关系数据库我们我们从名单上去除了另一个数据库。
像电子表格text文件或者餐巾纸天生的独一无二并且不能关联到其他对象。
从这点上来说当我们讨论数据库我们指包含能相互关联的表集合的关系数据库。
Relational Database Management Systems 关系数据库管理系统 一个关系数据库管理系统RDBMS 是一个能存储关系数据库的产品。
除了存储数据库 14 / 22 之外RDBMSs 提供许多其他功能。
他们给你一个方法包含数据库和管理用户的访问。
他们同事也有允许你管理的的数据功能比如备份和恢复索引管理数据加载公交甚至报告。
有很多的RDBMS产品是可用的从免费使用的
开源产品比如MySQL 到Orcale、Microsoft
SQL Server或者IBM’s的DB2这样的企业级解决方案。
你使用哪一个系统很大程度上依赖于你特殊的环境和需求。
这本书聚焦在Microsoft
SQL Server 2008上。
虽然一个数据模型可以被实施在任何系统它需要调整以适应那款产品。
如果你提前知道你将会部署在
SQL Server 2008上你能开始从第一步到最后一步调整一个数据库充分的利用
SQL Server提供的功能。
Why a Sound Data Model Is Important 为什么一个合理的数据模型是很重要的 数据建模时一个长期的过程并且正确的完成它需要很多个小时。
实际上当一个团队坐下来开始建立一个程序数据建模很容易就成为那个最耗时间的部分。
这个最大的时间投资意味着进程将会被经理程序开发客户审查。
令人诱惑的是缩短建模的过程随后继续创建数据库。
我们太经常看到一个程序的建立在“我们将会建数据库像我们要进行的那样”的态度下。
这是一条错误的方法来建立任何包含一个数据库的方案。
数据建模是非常重要的你花费时间正确的来做这些是生死攸关的。
没能在事情的开始做对将会导致你在项目期间重新检视数据库设计许多次。
数据建模是数据库最终被建立的计划。
如果计划就是有缺点的那么建立一个好的数据库是不可能的。
跟建立一个房子作比较。
你从蓝图开始里面展示了房子是怎样被建立的。
如果蓝图是不正确的或者不完善的你不能希望能建立一个房子。
数据建模是同样的。
确认数据建模对数据库来说是很重要的把它做正确同样也是很重要的。
设计良好的数据模型不知向蓝图一样服务同样也帮助你避免同样的共同数据库问题让我们探究一个合理的数据模型给你的益处。
Data Consistency 数据一致性 一个可靠的数据模型提供数据一致性。
没有数据一致性你能发现你有所有的数据你曾经想要的。
但是你不能从中存储有用的信息。
通过数据一致性我表达的意思是什么呢让我们假设你工作的公司存储它所有的信息在一张电子表格上。
在电子表格的世界里你的数据仅仅等于记录它的人。
数据一致性以为这样什么呢假设你存储你所有客户的信息在你的电子表格的单个工作表中。
你想知道一些关于每个客户的基本信息名称地址电话号码和Email地址。
那看起来足够很容易但是现在让我们将人的因素引入场景中。
你的客户服务人员被要求添加信息到工作表位每一个他们工作的新的客 15 / 22 户。
因为你的客户服务代表是人类他们如何记录个人不同的信息。
比如一个代表记录客户的信息显示在行1 表1.1另一个可能记录相同的客户信息用不同的方式同样显示在行2 表1.1. 表1.1 同样的客户信息被输入通过2个客户服务代表 Jonh Doe 123 Easy Street SF CA 94134 555-1956 jdoeadcnetwork.com J.Doe 123 Easy St. San Fran CA 94134 5551956 jdoeabcnetwork.com 这里一些细小的不同之处被确定了但是如果你靠近了看你将会看到同样的问题。
第一如果你想进行一个报告来计算所有你 San Francisco-based 的客户你如何进行呢当然一个人可以说“SF”和“San Fran”是San Francisco的速记但是一个电脑不能在没有帮助的情况下做出那样的假设。
为了进行您的报告你需要找到所有可能的方式一些能标示San Francisco 包含所有可能的错误拼写。
接下来让我们看客户的名字。
从开端我们确定这是同一个人吗“J.Doe”能是JaneDoe for Javier Doe 虽然两条记录中电子邮件地址是同样的我看到我的相同只有一点相同Email地址除此之外第二个客户服务代表忽略了客户的地区编码这意味着你必须花费时间找到他如果你需要去给客户打电话。
为了数据能是有用的数据必须是一贯性的这一点无论多重要都是不够的。
这意味着当你存储一条信息时是用同一种方法存储每次。
城市应该总是被存储为San Francisco。
并且电话号码总是带有区域
代码。
如果你的数据不是一贯性的你或者你设计系统的使用者将会花费太多时间试图搞清楚他并且造成太多零碎的时间。
但是你可能不想花费很多时间将数据模型化以便存储到一个电子表格中但是在数据库中会发生相同的事情。
Scalability 可伸缩性 当所有的都说过和做过了你想去建立一个客户能马上用的数据库并且能为将来做出一些预测。
不管你在数据模型上做了多少工作事情改变并且新的数据变的可用。
一个合理的数据库模型能提供缩放能力。
这意味着客户能继续添加记录到数据库并且模型将不会出现问题。
同样的添加新的信息到一个已经存在的实体不应该比添加一个属性稍后再这章讨论更困难。
相反一个设计不良的数据库将会很困难.
上一篇:
GKDBase+PLSQL引擎若干关键技术研究与实现
下一篇:
四季相伴,文字生香