背景
在过去的30年中,数据库的研究带来了巨大的生产力,使得数据库系统成为软件工程领域最重要的成果。目前,数据库作为信息系统的基本框架,已从根本上改变了许多公司的运作方式。特别是在最近几年里,随着这项技术本身的发展,产生了一些功能更强大、使用更方便的系统。这使得数据库系统变得越来越普及,用户类型也越来越广泛。遗憾的是,正是由于数据库系统的简单性,许多用户有可能尚缺乏必要的知识,还不懂得如何开发正确且高效的系统,就开始创建数据库及其应用程序了。这样很可能导致所谓的 “软件危机”(software crisis,有时也称为“软件抑郁”(software depression))的延续。
编写本书的最初动因是我们在工业界的工作经历,当时我们为新软件系统中数据库的设计提供咨询,间或也解决遗留系统中存在的种种问题。进入学术界后,我们从另一类用户—学生那里发现了类似的问题。因此,本书的目标就是给出一本教程,尽可能清楚地介绍数据库的基础理论,并给出一套既能为专业技术人员亦能为非技术人员所用的数据库设计方法学。
本书针对当前主流的商用产品—关系数据库管理系统(DBMS)给出的设计方法学,已在学术界和工业界测试和使用了许多年。它包括三个主要阶段:数据库的概念设计、逻辑设计和物理设计。第一个阶段在不考虑任何物理因素的前提下设计概念数据模型,得到的数据模型在第二阶段被细化为逻辑数据模型,细化过程主要是去除在关系系统中无法表示的结构。在第三阶段,逻辑数据模型被转换成针对目标DBMS的物理设计,物理设计阶段主要考虑如何设计存储结构和访问方法,以便有效并安全地访问存储在辅存中的数据库。
该方法学按阶段被分为一系列步骤。对于缺少经验的设计者,最好按步骤进行设计,这里所提供的指南可帮助你完成整个过程。对于有经验的设计者,该方法学的指导作用显然会弱化,但经常可用于开发框架和检查列表。为了帮助读者学习使用上述方法学并理解其要点,整个方法学的描述中始终贯穿一个完整的DreamHome案例研究。附录B还给出了另外三个案例,供读者自行研究。
UML(统一建模语言)
越来越多的公司都在规范各自的数据建模方法,即选择一种特定的建模方法并在整个数据库开发项目中始终如一地使用它。一种在数据库概念设计和逻辑设计阶段较为通用的高级数据模型是ER(实体-联系)模型,这也是本书采用的模型。由于当前还没有表示ER模型的标准方法,因此大部分书籍在描述关系DBMS的数据库设计时,常常使用下述两种表示方法之一:
Chen氏表示方法,即用矩形表示实体,用菱形表示联系,用线段连接矩形和菱形。
Crow Feet(鸦爪)表示方法,仍用矩形表示实体,用实体间的连线表示联系,在一对多联系连线的多端有一个鸦爪标记。
当前,这两种表示方法都有计算机辅助软件工程(CASE)工具。然而,它们都难于使用和解释。本书的较早版本曾使用Chen氏表示方法,而在随后培生教育出版集团进行的一次问卷调查中,比较一致的意见是应该使用最新的称为UML(Unified Modeling Language,统一建模语言)的面向对象建模语言。UML表示方法结合了面向对象设计三大流派的成分:Rumbaugh的OMT建模语言,Booch的面向对象分析和面向对象设计,以及Jacobson的Objectory。
换用表示方法主要有以下三个原因:(1)UML正成为一种工业标准,例如,对象管理组(OMG)已经采纳UML作为对象方法的标准表示方法;(2)UML表达清楚并易于使用;(3) UML目前已被学术界用于面向对象分析与设计的教学,在数据库模块的教学中也使用UML将会更加一致。因此,在这个版本中,我们将采用UML的类图作为ER模型的表示方法。读者将会发现这种表示方法更加容易理解和使用。
第6版的更新之处
扩展了第3章“数据库的结构与Web”,增加了云计算。
修改了第21章“数据管理中的职业、法律与道德问题”。
增加了“数据仓库与时态数据库”(31.5节)。
每章后增加了新的思考题和习题。
修改了与SQL相关的章节,全面反映2011年公布的新标准SQL:2011。
修订了第26章“复制与移动数据库”。
修改了关于Web-DBMS集成和XML的章节。
与Oracle相关的内容一律修改为针对Oracle 11g。
. 读者对象
本书可作为本科生数据库管理或数据库设计的导论性教材,也可作为研究生或高年级本科生相关课程的教材,学时可分为一到两个学期。通常信息系统、商业IT或计算机科学等专业都包含这类课程。
本书还可以作为一些IT专业人士的参考书,如系统分析和设计人员、应用程序开发人员、系统程序员、数据库从业人员及独立的自学者。随着当今数据库系统的广泛使用,这些专业人士可能来自于需要数据库的任何类型的公司。
读者在学习关于物理数据库设计的第18章和关于查询处理的第23章之前,如果对附录F中介绍的文件组织和数据结构相关概念有清楚的了解,那么将会有所帮助。理想的情况是这些背景知识已从前导课程中获得。如果不具备这个条件,则可以在开始数据库课程后,学完第1章立即学习附录F。
如果读者已经掌握了一门高级编程语言,比如C,那么在学习附录I的嵌入式与动态SQL和28.3节的ObjectStore时会更有成效。
突出特点
(1)为数据库逻辑设计和概念设计提供了易用、逐步指导的方法学,该方法学基于广泛采用的实体-联系模型并将规范化作为验证技术。此外,通过一个完整的案例研究来说明如何使用这套方法学。
(2)为数据库物理设计提供了易用、逐步指导的方法学,包括:逻辑设计到物理实现的映射,文件组织方法的选择,适合应用程序的索引结构,以及何时引入可控冗余。此外,通过一个完整的案例研究来说明如何使用这套方法学。
(3)用独立的章节来讲解以下三个主题:数据库设计阶段在整个系统开发生命周期中的位置与作用;如何使用实况发现技术来获取系统需求;如何将UML用于整个方法学。
(4)每章都采用清晰且易于理解的表述方法,如突出显示定义,明确给出各章学习目标,在各章最后进行小结。通篇使用了大量示例和图表来说明概念。来自现实生活的DreamHome案例研究贯穿全书,另外还给出若干案例供学生选作课程实践题目。
(5)扩充了下列最新的正式标准及事实标准:结构化查询语言(SQL),举例查询(QBE),面向对象数据库的对象数据管理组(ODMG)标准。
(6)利用三章的篇幅,以教程式风格介绍SQL标准,包含交互式和嵌入式SQL。
(7)专设一章讨论IT和数据库中的职业、法律与道德问题。
(8)全面讨论了与分布式DBMS和复制服务器相关的概念和问题。
(9)全面介绍了基于对象的DBMS中的一些概念和问题。回顾了ODMG标准,介绍了在最新公布的SQL版本SQL:2011中出现的各种对象管理机制。
(10)扩展了作为数据库应用平台的Web部分的内容,并给出多个Web数据库访问的代码示例。具体包括容器管理持久性(CMP)、Java数据对象(JDO)、Java持久性API(JPA)、JDBC、SQLJ、ActiveX数据对象(ADO)、ADO.NET和Oracle PL/SQL Pages(PSP)。
(11)介绍了半结构化数据及其与XML的关系,扩展了XML的内容和相关术语,包括XML Schema、XQuery、XQuery数据模型和形式语义。还讨论了在数据库中集成XML,以及为发布XML而在SQL:2008和SQL:2011中所做的扩展。
(12)全面介绍了数据仓库、联机分析处理(OLAP)和数据挖掘。
(13)全面介绍了用于数据仓库数据库设计的维度建模技术,并且通过一个完整的案例来演示如何使用该方法进行数据仓库数据库设计。
(14)介绍了DBMS系统实现的有关概念,包括并发技术和恢复控制、安全以及查询处理和查询优化。
教学方法
在开始撰写本书之前,我们的目标之一就是写一本让读者容易接受和理解的教材,而不管读者具备怎样的背景知识和经验。根据我们使用教材的经验以及从很多同事、客户和学生中吸收的意见,实际上存在若干读者喜爱和不喜爱的设计特性。考虑到这些因素,本书决定采用如下的风格和结构:
在每章的开头明确说明该章的学习目标。
清楚定义每一个重要的概念,并用特殊格式突出显示。
通篇大量使用图表来支持和阐明概念。
面向实际应用:为了做到这点,每章都包含了许多实际有效的示例以说明所描述的概念。
每章最后配有小结,涉及该章所有主要的概念。
每章最后配有思考题,问题的答案都可以在书中找到。
每章最后配有习题,教师可用其测试学生对章节内容的理解,自学者也可进行自测。全部习题的答案可以在原书配套的教辅资源“教师答案手册”中找到。
教辅资源
适用于本教材的教辅资源包括:
课程PPT。
教师答案手册,包括所有课后思考题和习题的答案示例。
其他资源的配套网站:www.pearsonhighered.com/connolly-begg。
上述资源仅提供给在www.pearsonhighered.com/irc上注册过的教师。请与当地的销售代表联系。
本书结构
第一部分背景
本书的第一部分介绍数据库系统和数据库设计。
第1章引入数据库管理的概念。主要阐述了数据库前身,即基于文件的系统之不足及数据库方法所具备的优势。
第2章总览数据库环境。主要讨论了三层ANSI-SPARC体系结构的优点,介绍了目前最通用的数据模型,列出了多用户DBMS应提供的各种功能。
第3章考察各种多用户DBMS结构,讨论了数据库领域不同类型的中间件。分析Web服务,它能为用户和SOA(面向服务的结构)提供新型的业务服务。该章简要描述分布式DBMS和数据仓库的结构,后面还将详细讨论。该章还给出一个抽象DBMS的内部结构以及Oracle DBMS的逻辑结构和物理结构,这一部分内容在数据库管理初级课程中可以略去。
第二部分关系模型与语言
本书的第二部分介绍关系模型和关系语言,即关系代数和关系演算、QBE(举例查询)和SQL(结构化查询语言)。这部分还介绍了两种非常流行的商用系统:Microsoft Access和Oracle。
第4章介绍当前最流行的数据模型—关系模型背后的概念,这是最常被选作商用标准的模型。具体安排是首先介绍术语并说明其与数学上的关系的联系,然后讨论关系完整性规则,包括实体完整性和引用完整性。这一章最后概述视图,第7章还将进一步讨论视图。
第5章介绍关系代数和关系演算,并用示例加以说明。这部分内容在数据库管理初级课程中可以略去。然而,在第23章学习查询处理和第24章学习分布式DBMS的分段时需要用到关系代数的知识。此外,虽然不是绝对有必要,但是了解过程式的代数与非过程式的演算之间的区别将有利于学习第6章和第7章介绍的SQL语言。
第6章介绍SQL的数据操作语句SELECT、INSERT、UPDATE和DELETE。该章通过一系列有效的示例,以教程式的风格说明了这些语句的主要概念。
第7章讨论SQL标准中主要的数据定义机制。该章仍采用教程式风格,介绍SQL的数据类型、数据定义语句、完整性增强特性(IEF)和数据定义语句中一些更高级的特性,包括访问控制语句GRANT和REVOKE。此外,将再次讨论视图以及用SQL如何创建视图。
第8章涉及SQL的一些高级特性,包括SQL的编程语言(SQL/PSM)、触发器和存储过程。
第9章介绍对象关系DBMS,并详细描述了SQL新标准SQL:2011中的各种对象管理特性。该章还讨论了如何扩展查询处理和查询优化机制,以高效处理扩展的各种数据类型。该章最后将讨论Oracle中的对象关系特性。
第三部分数据库分析与设计
本书的第三部分讨论数据库分析和设计的主要技术,以及这些技术的实际运用方法。
第10章总览数据库系统开发生命周期的各个主要阶段。特别强调了数据库设计的重要性,并说明这个过程如何被分为概念、逻辑和物理数据库设计三个阶段。此外,还描述了应用程序的设计(功能方面)对数据库设计(数据方面)的影响。数据库系统开发生命周期的关键阶段是选择合适的DBMS。这一章讨论了对DBMS的选择过程,提供了一系列方针和建议。
第11章讨论数据库开发者应于何时使用实况发现技术,以及捕获何种类型的实况。这一章描述了最常用的实况发现技术及其优缺点。通过DreamHome案例研究说明在数据库系统生命周期的早期阶段如何应用这些技术。
第12章和第13章介绍了实体-联系模型和扩展的实体-联系(EER)模型,在EER模型中,允许使用更高级的数据建模技术,如子类、超类和分类。EER模型是一种流行的高级概念数据模型,也是这里讨论的数据库设计方法学的一种基本技术。这两章还为读者介绍了如何使用UML来表示ER图。
第14章和第15章阐述了规范化背后的一系列概念,它是逻辑数据库设计方法学中的另一项重要技术。通过从一个完整的案例中抽取的几个有效部分,说明如何从一种范式转换到另一种范式,以及将数据库逻辑设计转换为某一更高范式(直至第五范式)的好处。
第四部分方法学
本书的第四部分介绍了一种数据库设计方法学。该方法学分为三个阶段,分别是概念数据库设计、逻辑数据库设计和物理数据库设计。每个部分都使用DreamHome案例研究加以阐述。
第16章为概念数据库设计提供逐步指导的方法学。该章说明了如何将设计分解成多个基于各自视图的易于管理的部分,还给出了标识实体、属性、联系和关键字的方法。
第17章为关系模型的逻辑数据库设计提供逐步指导的方法学。该章阐述了如何将概念数据模型映射到逻辑数据模型,以及如何针对所需的事务使用规范化技术来验证逻辑数据模型。对于有多个用户视图的数据库系统,这一章还介绍了如何将得到的多个数据模型合并为一个能表示所有视图的全局数据模型。
第18章和第19章为关系系统的物理数据库设计提供逐步指导的方法学。该章阐述了如何将逻辑数据库设计阶段开发的全局数据模型转换成某关系系统的物理设计。方法学中还说明了如何通过选择文件组织方式和存储结构,以及何时引入可控冗余来改善实现的性能。
第五部分可选的数据库专题
第五部分阐述了我们认为对于现代数据库管理课程必要的四个专题。
第20章讨论数据库的安全和管理问题。安全不仅要考虑DBMS,还包括整个环境。该章将讨论Microsoft Office Access和Oracle提供的一些安全保障,并专门阐述了在Web环境下的一些安全问题,并给出了解决这些问题的方法。最后讨论数据管理和数据库管理的任务。
第21章考虑有关IT和数据管理与治理的职业、法律与道德问题。主要内容包括区分数据和数据库管理员面对的问题和场景中哪些属法律范畴、哪些属道德范畴;各项新的规章给数据和数据库管理员提出了哪些新的要求和职责;萨班斯-奥克斯利法案和巴塞尔Ⅱ协议等法规对数据和数据库管理功能有何影响,等等。
第22章集中讨论了数据库管理系统应该提供的三种功能,即事务管理、并发控制及故障恢复。这些技术用于确保当多个用户访问数据库或出现硬件/软件部件错误时数据库是可靠且一致的。该章还讨论了一些更适合于长寿事务的高级事务模型,最后分析了Oracle中的事务管理。
第23章阐述查询处理和查询优化。该章讨论查询优化的两种主要技术:一种是使用启发式规则安排查询中操作的顺序,另一种是通过比较不同策略的相对代价选择资源耗费最少的策略。最后分析了Oracle中的查询处理。
第六部分分布式DBMS与复制
第六部分阐述分布式DBMS。分布式DBMS技术是当前数据库系统领域一个主要的发展方向。本书前面各章主要介绍集中数据库系统,即由单个DBMS控制的位于单个节点的单一逻辑数据库。
第24章讨论分布式DBMS的概念与问题。使用分布式DBMS时,用户既可以访问自己节点上的数据库,也可以访问存储在远程节点上的数据。
第25章阐述与分布式DBMS相关的各个高级概念。具体地说,重点阐述与分布式事务管理、并发控制、死锁管理以及数据库恢复相关的协议。此外,还讨论了X/Open分布式事务处理(DTP)协议。最后分析了Oracle中的数据分布机制。
第26章讨论利用复制服务器替代分布式DBMS的方案以及与移动数据库相关的问题。该章也分析了Oracle中的复制机制。
第七部分对象DBMS
本书前面各章都在关注关系模型和关系系统,其原因是这类系统在当前传统业务数据库应用中占据主导地位。不过,关系系统并不是万能的,在数据库领域发展面向对象DBMS就是试图克服关系系统的一些缺陷。第27章和第28章就专门叙述这一方面的发展细节。
第27章首先引入基于对象的DBMS(object-based DBMS)的概念,查看业已出现的各类新兴的数据库应用,说明关系数据模型因其种种弱点而对这些新兴的应用无能为力。然后讨论面向对象DBMS(object-oriented DBMS)的概念,从介绍面向对象数据模型及持久性编程语言开始。接下来,分析通常DBMS所用的两层存储模型与面向对象DBMS所用的单层存储模型的区别及对数据访问的影响。此外,还讨论了提供编程语言持久性的不同方法、指针混写的不同技术、版本控制、模式进化和面向对象DBMS体系结构等问题。该章也简要介绍了如何将本书第四部分介绍的方法学推广到面向对象DBMS中。
第28章介绍面向对象管理组(Object Data Management Group,ODMG)推荐的新的对象模型,这一模型已成为面向对象DBMS的事实标准。该章还介绍了一个商用的面向对象数据库——ObjectStore。
第八部分Web与 DBMS
本书的第八部分涉及将DBMS集成到Web环境的问题,以及半结构化数据及其与XML的关系、XML查询语言和XML到数据库的映射。
第29章阐述将DBMS集成到Web环境的问题。首先简单介绍Internet和Web技术,然后说明Web作为数据库应用平台的适宜性,并讨论这种方法的优缺点。随后讨论若干种将DBMS集成到Web环境的方法,包括脚本语言、CGI、服务器扩展、Java、ADO和ADO.NET,以及Oracle Internet Platform。
第30章阐述半结构化数据,然后讨论XML及XML如何成为Web上数据表示和交换的流行标准。该章讨论XML相关技术,如名字空间、XSL、XPath、XPointer、XLink、SOAP、WSDL和UDDI,等等。该章还阐述怎样用XML模式定义XML文档的内容模型,以及怎样用资源描述框架(RDF)为元数据交换提供框架。此外,还讨论了XML的查询语言,具体集中在由W3C提出的XQuery。该章也讨论了为支持XML发布,或更广义地说为在数据库中映射和存储XML而对SQL:2011的扩展。
第九部分商业智能
本书的最后一部分考虑与商业智能有关的主要技术,包括数据仓库、联机分析处理(OLAP)和数据挖掘。
第31章讨论数据仓库,包括它的定义、进化过程及潜在优缺点。该章阐述数据仓库的体系结构、主要组成部分和相关工具与技术,讨论数据集市及其开发和管理的有关问题。此外也讨论了数据仓库中与时间数据管理关联的概念及实践。最后分析了Oracle中的数据仓库机制。
第32章提供了设计用于决策支持的数据仓库和数据集市数据库的方法。该章描述了维度建模技术的基本概念并将其与传统的实体-联系建模技术进行比较;给出了数据仓库设计方法学指南,并通过扩展的DreamHome案例研究说明如何实际使用该方法学。该章最后说明如何用Oracle Warehouse Builder设计数据仓库。
第33章考虑联机分析处理(OLAP)。首先讨论了何谓OLAP以及OLAP应用的主要特性,然后讨论了多维数据的表示及主要的OLAP工具,最后讨论了SQL标准针对OLAP的扩展以及Oracle对OLAP的支持。
第34章考虑数据挖掘(DM)。首先讨论了何谓DM以及DM应用的主要特性,然后讨论了数据挖掘操作的主要特性和相关技术,最后描述了DM过程和DM工具的主要特性,以及Oracle对DM的支持。
附录
附录A给出DreamHome案例研究的说明,它将在全书通篇使用。
附录B给出另外三个案例研究,供学生课程设计时选用。
附录C给出有别于UML的另外两种建模表示法,即Chen氏表示方法和Crow Feet表示方法。
附录D总结了第16~19章讨论的概念、逻辑和物理数据库设计方法学。
附录E简单介绍用C#实现的一个称为Pyrrho的轻量级RDBMS,它能说明本书讨论的许多概念,还能下载使用。
在线附录
附录F介绍文件组织和存储结构的相关概念,它们对理解第18章讨论的物理数据库设计和第23章讨论的查询处理是必要的。
附录G给出Codd的关于关系DBMS 的12条规则,它是鉴别关系DBMS的标准。
附录H介绍了两种最常用的商用关系DBMS:Microsoft Office Access和Oracle。在本书的许多章节中,都涵盖这两种DBMS如何实现各种机制的内容,例如安全和查询处理等。
附录I借助C语言示例程序说明嵌入式和动态SQL,还介绍了开放数据库互连(ODBC),这一标准现在已经成为访问异构SQL数据库的业界标准。
附录J讨论如何估计Oracle数据库的磁盘空间需求。
附录K概述面向对象的主要概念。
附录L提供若干Web脚本示例,补充第29章关于Web和DBMS的讨论。
附录M介绍交互式查询语言QBE(举例查询),对于非专业用户来说,它是访问数据库时最易使用的语言之一。附录中将使用Microsoft Office Access来说明QBE的用法。
附录N给出第三代DBMS宣言。
附录O 介绍Postgres,它是一个早期的对象关系DBMS。
本书的逻辑组织及建议的阅读路线见图0-1。
纠错和建议
如此大部头的一本教材难免出现错误、分歧、遗漏和混乱,恳请各位读者为未来的再版和编辑留下你的意见。任何建议、纠错和建设性意见都可发邮件告诉我:thomas.connolly@uws.ac.uk。
致谢
这本书是我们在工业界、研究机构和学术界工作多年的结晶。要想列出在此过程中帮助过我们的所有人是很难的。我们在此对任何不巧被遗漏的人表示歉意。首先,我们把最特别的感谢和道歉送给我们的家人,这些年我们完全埋头工作,怠慢甚至忽略了他们。
我们想要感谢审阅本书早期版本的那些人:得克萨斯技术大学的William H. Gwinn,位于莱斯特的德蒙福特大学的Adrian Larner,斯克莱德大学的Andrew McGettrick,南加州大学的Dennis McLeod,加州大学的Josephine DeGuzman Mendoza,俄克拉何马大学的Jeff Naughton,诺瓦东南大学的Junping Sun,佐治亚理工大学的 Donovan Young,布拉德富大学的Barry Eaglestone,IBM的 John Wade,米兰理工大学的Stephano Ceri,位于厄斯特松德的瑞中大学的Lars Gillberg,位于哈利法克斯的圣玛丽大学的Dawn Jutla,伦敦城市大学的Julie McCann,北卡罗来纳州立大学的Munindar Singh,英国赫斯利的Hugh Darwen,法国巴黎大学的Claude Delobel,英国雷丁大学的Dennis Murray,格拉斯哥大学的Richard Cooper,厄勒布鲁大学的Emma Eliason,斯德哥尔摩大学和皇家技术学院的Sari Hakkarainen,芝加哥洛约拉大学的Nenad Jukic,安特卫普大学的 Jan Paredaens,丹尼尔·韦伯斯特学院的 Stephen Priest以及来自我们系的John Kawala 和 Peter Knaggs,还有许多匿名的人,谢谢你们花了那么多时间看我们的书稿。我们也想感谢Anne Strachan对第1版的贡献。
图0-1本书的逻辑组织及建议的阅读路线
我们还要感谢拉马尔大学的 Kakoli Bandyopadhyay,北得克萨斯大学的Jiangping Chen,芶地比肯学院的Robert Donnelly,多明尼克大学的Cyrus Grant,华盛顿大学的David G. Hendry,斯特林大学的Amir Hussain,俄克拉何马州立大学的Marilyn G. Kletke,伦敦城市大学CCTM系知识管理研究组的Farhi Marir,印第安纳大学伯明顿主校区的Javed Mostafa,曼彻斯特大学的Goran Nenadic,旧金山州立大学的 Robert C. Nickerson,丹佛大学的Amy Phillips和劳伦斯技术大学的Pamela Smith。
关于第6版,我们想特别感谢Pearson的编辑Marcia Horton,Pearson出版团队的Kayla Smith-Tarbox和Marilyn Lloyd,以及Cenveo公司的项目负责人Vasundhara Sawhney。我们也要感谢下面这些人做出的贡献:瑞典斯德哥尔摩大学的Nikos Dimitrakas,卡迪夫大学的Tom Carnduff,匹斯堡技术学院的David Kingston,马里兰大学Park校区的Catherine Anderson,罗切斯特理工学院的Xumin Liu,澳大利亚国立大学的Dr. Mohammed Yamin,伊兹密尔经济大学的Cahit Aybet,芬兰哈格-赫利尔应用科学大学的Martti Laiho,德国罗伊特林根大学的Fritz Laux和Tim Lessner,以及英国西苏格兰大学的Malcolm Crowe。
我们还应该感谢Malcolm Bronte-Stewart 提出了 DreamHome 的想法,Moira O扗onnell 保证了Wellmeadows Hospital案例研究的准确性,Alistair McMonnies和 Richard Beeby帮助准备了Web网站上的材料。
Thomas M. Connolly
Carolyn E. Begg
格拉斯哥,2013年2月