此文章主要向大家讲述的是SQL Server数据库与.NET与Visual Studio的联通的介绍,随着SQL Server 2008数据库的的上市,微软另两款开发产品.NET Framework 3.5与Visual Studio 2008也同步发布中文版Service Pack 1。
包含传闻已久的微软ORM(Object Relational Mapping)解决方案──ADO.NET Entity Framework,而LINQ,随着SQL Server 2008的上市,微软另两款开发产品.NET Framework 3.5及Visual Studio 2008也同步发布中文版Service Pack 1,包含传闻已久的微软ORM(Object Relational Mapping)解决方案──ADO.NET Entity Framework,而LINQ(Language Integrated Query)也将增加支持存取Entity Framework对象的LINQ To Entities。
此外, ADO.NET Data Services也是新的,包含比SOAP(Simple Object Access Protocol)通讯协议更简单的REST(Representational State Transfer)存取模式,可满足倾向简单应用Web Services的Web开发者。
事实上,Visual Studio必须升级才能与SQL Server 2008无缝挂接,微软的.NET与SQL Server研发团队,有越来越紧密合作的趋势,操作SQL Server数据库***用的开发工具是Visual Studio,而.NET Framework目前支持最完整的数据库也是SQL Server数据库,可以看出微软企图利用彼此捆绑的策略,拉抬两者市场份额的野心。
而SQL Server 2008本身跟程序开发有关的部分,比较重要的改变是增加许多新的数据方式,包括FileStream及Geography、Geometry等空间数据格式。FileStream可以存放文件的Metadata,并指定存放文件的实体目录。而空间数据方式则包含许多函数,帮助开发者处理点/线/面的空间计算。
对象与关系型数据对应的解决方案
LINQ与ADO.NET Entity Framework在微软是由两个不同的团队研发,功能上看似有些重迭,但实际上是要解决现今程序开发上,所面临的不同问题。
LINQ提供统一操作各种数据集合的模式;而ADO.NET Entity Framework则是提供对象导向开发者,对象与关系型数据对应的解决方案。
相对于对象导向程序开发的思维,在发明SQL的年代,并没有对象导向的观念,所以SQL语法一点也不对象导向。而习惯用对象思考,并希望对象导向观念与关系型数据库可以平顺整合的开发者,会希望有一套ORM解决方案。
而ORM的目的,是企图帮助开发者从对象导向程序开发的角度,单纯地思考类别之间的继承及参照关系,而不需要知道实体的数据是如何分散在不同的数据表,以及对象背后对应哪些数据表,甚至SQL指令的组成,也交由平台处理。
ADO.NET Entity Framework就是微软的ORM解决方案,事实上,ORM在Java及PHP等阵营早有对应的解决方案,所以微软在这方面的脚步并不算是很快。
ORM的价值
ADO.NET Entity Framework中的“Entity(数据实体)”,是指对象化的数据记录。使用数据实体而不直接连接数据库的好处,在于开发者不必使用SQL指令,而是透过对象的方法(Method)存取数据库,藉以简化程序设计的复杂度,并提升程序代码重复使用的机会。
以客户数据为例,在数据库有Customer和Customer Detail两个数据表(Table),运用ADO.NET Entity Framework,可以把2个数据表对应(Mapping)成一个Customer数据实体,也就是对象类别,开发者只需呼叫Customer类别的Insert、Update和Delete等Method,并输入必要的参数,那么ADO.NET Entity Framework即自动产生对应的SQL语法,一对多地新增、修改及删除Customer和Customer Detail数据表中的数据。
对象与数据表的对应,除了一对多的情况,也可能是多对一甚至多对多的复杂对应。例如一个Employee数据表,在业务面因为属性不同,而拆成Manager、Employee和新人等3个不同的类别。
由于ORM需要对应SQL Server数据库与对象的关联,还要处理对象之间的继承关系,使得应用上存在一定的复杂度,因此,设计工具扮演的角色,相形之下变得重要,如果它无法使对应关系的设定,尽可能地简单而直觉,就会减损使用ORM的好处。
Visual Studio 2008升级至SP1之后,将提供可视化的精灵及操作工具,处理数据实体与数据库的对应。主要的功能包括透过实体数据模型(Entity Data Model)导入现有数据库的数据表,再以此为基础,设定数据表之间的关联,然后经由概念模型(Conceptual Model)处理数据表与数据实体两者的对应。
这些作法的背后,实际上底层是透过3个XML文件记录数据实体、数据库结构及两者之间的对应关系。不过,Visual Studio的操作界面,将透过图形化的设计工具简化对应的难度。
概念模型与ER Model不同
微软所谓的概念模型,与过去设计数据库架构常见的ER Model(Entity Relationship Model,实体关系模型)并不相同。
ER Model以图形化的方式,描述实体数据表之间的一对一、一对多或多对多关系,是属于实体的数据库模型。而概念模型则贴近系统分析阶段的思维,以业务的角度看待数据实体。
从这里也可以看出对象导向与SQL Server数据库设计理念的不同之处。
数据库设计时,为了避免同样的数据重复存在于多个数据表,造成空间的浪费及维护的困难,所以必须历经正规化过程。
例如员工基本数据包含亲属数据,但设计关系型数据库时为了正规化,亲属数据可能被拆出来,成为另一个数据表,而两者透过主键(Primary Key)和外部索引键(Foreign Key)建立一对多关系。
使用ER Model就会是两个数据表透过一对多关系连接,而进入概念模型之后,就对象导向的观点,将是以一个数据实体代表员工,其中会有一个属性是亲属数据的集合。而在概念模型的背后,是员工这个数据实体,一对多地对应到数据库的员工数据及亲属数据两个数据表。
【编辑推荐】
- SQL Server数据转换服务利用与导入式格式的描述
- SQL Server性能进行提高的4项技术概述
- 正确维护Sql Server表索引的2个步骤
- SQL Server数据库的N多注意事项
- SQL ServerCoalesce的大量使用的具体描述