【网学网提醒】:网学会员为大家收集整理了数据库学习资料提供大家参考,希望对大家有所帮助!
数据库服务器架构设计》《sqlserver2005数据库服务器架构设计》读后感
本书面对的读者以dba为主,我目前的工作跟数据库的设计、开发有关,跟维护无关,因此大部分的内容我都是粗略的读了一遍。跟开发设计有关的主要是第12章“设计物理数据库”,这一章是微软的一些简单的物理数据库设计相关的知识、技巧。还是值得一读。
SQLServer2008数据库设计与实现》:对做数据库设计工作的人来说非常值得一读。数据库设计与实现》对做数据库设计工作的人来说非常值得一读对做数据库设计工作的人来说非常值得一读。
这本书读到一半了。我看过的中文的数据库设计的书中,本书是最好的一本。与《数据模型资源手册》系列侧重点不同,讲的是物理数据库设计的方方面面。比如说范式,本书对范式的归类我认为思路非常清晰。这本书作者认为是第四版了。第一版的中文版名字叫《sqlserver2000数据库设计权威指南》。是wrox出的红皮书。作者序言中承认,自己写第一版的时候还处于“以为自己无所不知”的境界。8年之后,现在处于“知道自己有所不知”的境界。对第一版做了许多修改。总之,对做数据库设计工作的人来说,这本书非常值得一读。
《数据模型资源手册》一二三卷:逻辑数据库设计的经典数据模型资源手册》一二三卷:
《数据模型资源手册》共出了三卷。一二卷英文版2001年出版,中文翻译版2004年出版。中文版销量很差,因此出版该书的机械工业出版社没有再版,目前市场上这两本书已经绝版。淘宝上还可以买到复印版。china-pub上可以按需印刷,不过比较贵。卷三是今年年初出版的,英文版,中文版估计过几年才能看多,或者就看不到了。好在现在有互联网和银联卡,大概是在今年3,4月份我直接用招行的信用卡在amazon上买了一本,10多天之后就到了。这三本书在amazon上评价都很高。中文版的一二卷在当当和卓越上评价都不错,一些技术论坛上看过的人的评价也都很高。我也认为是非常值得看的一套书。
其中第一卷讲一些通用的数据模型,比如个人与组织,产品,订单,订单配送,发票,财务,人力资源等。卷二是一些特定行业的数据模型,在卷一的基础上会有所变化,比如制造业,电信,金融,保险,医疗,旅游业,电子商务等。卷三讲的有点类似于设计模式了,作者对数据模型的
抽象程度做了分类,对卷一提到的各种数据模型在不同的抽象程度下设计出来的数据模型做详细的分析,据此比较容易看明白卷一和卷二中作者设计的思路。看完这三卷之后我目前印象还比较
深的有三个模块,一个是个人与组织,一个是联系方式,一个是业务规则。个人与组织被抽象为party,这样的好处在我们公司的CRM中应该会比较明显,我们公司的会员中既有组织又有个人,我们公司的代理中也是既有组织又有个人。目前的逻辑是认为会员表中都是个人,代理表中都是组织,实际上有很多例外情况。联系方式,卷一和卷二给出了抽象程度比较高的模型,把电话,手机,email,qq,通信地址等抽象为一种“通信机制”。抽象程度比较高的话,扩展性会好一些,与其他实体的关联会简单一些。比如party的联系机制,只需要一个表就可以了。我们公司的会员表中用的是抽象程度最低的做法,会员表中直接有一列叫BP机号码。新做的客史项目抽象程度高一些。
业务规则,可以把不同行业的不同的业务规则容纳进来。我看过这个模型之后发现我们公司酒店业务用的rateplan,机票系统用的运价,都可以用这个业务规则实体来表示。
技术内幕:查询》:》:T-SQL进阶必读《SQLServer2005技术内幕:T-SQl查询》:
本书前三章讲原理,后面讲具体的技巧。译者赵立东的建议是前三章非常值得读,如果没时间的话,可以只看前三章。我现在看到第六章了(共9章),感觉确实如赵立东所说,前三章讲sql的原理,比较深入,非常值得一看,后面讲一些sql应用方面的主题,同样很深入,我认为也很值得看。具体的目录可以参见product.dangdang/product.aspx?product_id=20101939因为比较深入,因此本书不是一本t-sql入门书,我的看法是最适合写了好几年代码自己认为对t-sql很熟悉了但是从来没系统学习过t-sql的人。中文书中还有一本水平比较高的《Transact-SQL权威指南》,微软内部的一位sql专家也比较推荐,我还没看,中译本是2002年出的,肯定不会讲到sqlserver2005的内容。因此我还是先看这本书了。下面摘抄几处书中比较经典的文字:1:在筛选器中比较两个NULL值将得到UNKNOWN,它会被当作false处理,就像其中一个NULL不等于另外一个NULL。
而UNIQUE约束、排序操作和分组操作认为两个NULL值是相等的。2:不带else子句的case表达式包含一个隐含的elseNULL。3:尽管通常使用select*不是一个好习惯,但是在exists子句中可以放心使用。因为exists只关心行是否存在,不关心特定属性,优化器将忽略子查询中的select列表。4:一个好的实践是在子查询中总是为所有属性限制表名称或别名,即使子查询是独立子查询也应该如此。5:除了一个例外之外,在innerjoin的on子句中或where子句中指定逻辑表达式没有任何区
别。
技术内幕:查询》:》:常见《SQLServer2005技术内幕:T-SQl查询》:常见sql问题归类解答
这本书差20页就看完了。本来以为这本书的主题是sqlserver2005的t-sql的讲解,读完后发现不是。书中并没有系统讲解t-sql。前三章讲查询的原理,后面六章把常见的sql问题分类,每章一类:第4章子查询、表表达式和排名函数,第5章联接和集合操作,第6章聚合和旋转数据,第7章TOP和ALLPY,第8章数据修改,第9章图、树、层次结构和递归查询。作者在序言中说过,仔细阅读本书,并且花些时间做书中的练习,可以在短时间内掌握作者十几年积累的经验。我看完本书并且基本把书中的代码看过一遍,感觉确实学到了作者的许多经验,作者经验非常丰富。许多解决方案表现出来的不光是作者在sql上的技巧,其中的算法也很值得学习。另外许多问题都给出sqlserver2000下的解决方案和sqlserver2005下的解决方案。下面举两个例子:1。快速生成一个数据表,只有一列,这一列的值从1到8000,sql只需要执行14次(第一条sql插入数据1,后面12次把2的12次方4096以内的数据插入,后面剩下的8000-4096个数字一次生成)而不是8000次:SETNOCOUNTON;USEtempdb;GOIFOBJECT_ID('dbo.Nums')ISNOTNULLDROPTABLEdbo.Nums;GO
CREATETABLEdbo.Nums(nINTNOTNULLPRIMARYKEY);DECLARE@maxASINT,@rcASINT;SET@max=8000;SET@rc=1;INSERTINTONumsVALUES(1);WHILE@rc*2<=@maxBEGININSERTINTOdbo.NumsSELECTn+@rcFROMdbo.Nums;SET@rc=@rc*2;ENDINSERTINTOdbo.NumsSELECTn+@rcFROMdbo.NumsWHEREn+@rc<=@max;GO2。对于递归结构的表,作者介绍了常见的设计方式(递归)之外,还介绍了JoeCelko提出的嵌套集合模型。并给出了自己的更快速的实现方法。这个模型在数的每个节点上设置两个值:左值和右值。左值小于所有的下级节点的左值,右值大于所有的下级节点的右值,最终计算递归关系非常快。当然这种模型中一个节点的改变会导致平均一半的节点需要重新计算左值和右值,因此不适合需要经常实时变化的数据表。具体的sql比较长,有兴趣可以看书或者下载本书的源代码。
SQLServer2005技术内幕:T-SQL程序设计》:四部经典之二技术内幕:程序设计》:》:四部经典之二
本书是微软“SQLServer2005技术内幕”四部之二。之一是《SQLServer2005技术内幕:T-SQL查询》,讲的是基本的增删改查的语法。本书讲的是提供流控制、输出、变量声明和处理以及我们在大部分非数据库编程语言中可以找到的其他功能,如decalre、begin、if、else、waitfor、print等。同样非常经典,非常值
得阅读。以下抄录部分精彩内容:
1:不管数据库的DateFirst设为多少,输入一个星期二的日期总是返回2的公式:DatePart(weekday,dt+@@DateFirst-n)2:避免在不同的存储过程/级别中把临时表命名为相同的名称是非常明智的。3:如果语句是外部事务的一部分,外部事务回滚后,对表变量已经完成的更改将不可撤消。表变量在这一点上是独一无二的。4:在sp_executesql中执行的查询字符串被限制为Unicode字符串(nvarchar)支持的最大长度,即4000个字符。而exec支持常规字符串(varchar),允许最大8000个字符。另外,exec还支持一个特殊的功能:允许你在括号中串联多个变量,每个变量都支持8000个字符的长度。5:IFexists(select1/0)print'noerror'运行时不会产生错误。6:sqlserver根据表达式的结果中优先级最高的数据类型确定case表达式结果的数据类型,而不是按实际返回的结果的数据类型确定。这意味着,如果case表达式的一个then子句返回varchar,另外一个返回int,那么表达式的结果将总是int,因为int的优先级比varchar高。7:insteadof触发器不会递归触发。
实战》:》:大概是目前中文《SQLServer2008实战》:大概是目前中文T-SQL图书中最优秀的一本
这本书英文名叫“SQLServer2008Transact-SQLRecipes”,直译过来是《SQLServer2008T-SQL秘籍》或《SQLServer2008T-SQL处方》。英文版在amazon上用户评价是4星半。译成《SQLServer2008实战》显然是编辑为了吸引更多的眼球加入了标题党。这本书专门讲T-SQL(也就是Microsoft关于SQL的方言,有一部分只能用于MicrosoftSQLServer的)涉及T-SQL的各种应用。。除常见的数据操作(简称DML,增删改查都属于DML)、
数据定义(DDL,如建表、建存储过程),还有一半是讲数据库管理过程中可以用到的SQL,如管理用户、加密,CLR集成、备份、镜像等过程中使用的SQL。确实是T-SQL大全。我感觉书写的比较好。比较全面,讲解言简意赅,有不少实例。感觉比《SQLserver2005内幕》系列讲的好。另外这本书中涉及到SQLServer2008专用的特性,都明确提出。因此如果还在用SQLServer2005,想找T-SQL手册,非常有必要选择这本书。这样可以在满足需求的基础上,还能了解到SQLServer2008新增的特性。如果还在用SQLServer2000或更早版本,也许这本书不是最佳选择。目前我只看了一小部分。前面讲的新特性中,Merge比较实用,可以在一句话中执行insert、update、delete。好处应该有两点:第一是执行效率提高,原来可能要查三次,分别执行三次,现在可以改为查一次。第二是原来可能需要使用
显式事务来保证数据的一致性,现在可以在一句话中执行完毕,不需要显式事务,减少了对资源的占用。下面是一个例子:MERGEINTOHumanResources.CorporateHousingpUSINGdbo.StagingCorporateHousingsONp.UnitNBR=s.UnitNBRWHENMATCHEDANDs.IsRentedIND<>p.IsRentedINDTHENUPDATESETIsRentedIND=s.IsRentedINDWHENNOTMATCHEDBYTARGETTHENINSERT(UnitNBR,IsRentedIND)VALUES(s.UnitNBR,s.IsRentedIND)WHENNOTMATCHEDBYSOURCETHENDELETE;