欢迎光临
免费的PDF电子书下载网站

跟韩老师学SQL Server数据库设计与开发 PDF下载

编辑推荐

微软MVP、51CTO专家讲师韩立刚老师呕心著作,十余年企业实践经验 大学授课经验,毫无保留

●范式、多表联接、联接查询、存储过程、索引、触发、事务、锁……

这些核心概念你真的懂吗?

●用*好懂的方式水煮讲解复杂概念,所有似懂非懂一扫而光!

● ;超10年企业实战经验与多年大学授课经验完美结合

● ;课本知识与企业需求无缝衔接,项目教学 案例教学 校企合作的完美实践

 ;

内容简介

在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。

韩立刚主编的这本《跟韩老师学SQL Server数据库设计与开发》讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。

本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用 UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。

在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。

韩立刚主编的这本《跟韩老师学SQL Server数据库设计与开发》讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。

本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用 UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。

作者简介

本书是一本数据库设计与开发的创新型教材。

本书以SQL Server为平台,在满足知识系统性的前提下,重点解决数据库设计与开发的学习过程中的重点难点问题。全书力求深入浅出,生动有趣,贴合职业需求,以好教、好学、有用为标准,是一本真正具有创新意义的数据库技术教材经典。

在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。本书讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。

本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。

本书适合于本专科计算机专业或相关专业的数据库教学用书。也适合于数据库管理员、软件开发人员、企业IT运维人员及广大数据库爱好者自学使用

跟韩老师学SQL Server数据库设计与开发 PDF下载

目录

前言第1章 关系数据库 /11.1 关系模型基本概念 /11.2 E-R模型到关系模型的转化 /31.3 数据库设计规范 /61.3.1 第一范式(1NF) /61.3.2 第二范式(2NF) /71.3.3 第三范式(3NF) /8第2章 Transact-SQL概述 /102.1 启动SQLServer Management Studio(SSMS) /102.2 T-SQL语句的类型 /122.2.1 DDL语句 /122.2.2 DCL语句 /132.2.3 DML /142.3 T-SQL语法要素 /162.3.1 SQL语句的批处理符号GO /162.3.2 EXEC /172.3.3 注释符 /172.3.4 标识符 /182.4 变量 /192.5 数据类型 /212.5.1 字符串类型 /212.5.2 Unicode字符串类型 /232.5.3 日期时间类型 /232.5.4 数值类型 /232.6 运算符 /252.6.1 算术运算符 /252.6.2 比较运算符 /252.6.3 逻辑运算符 /252.6.4 连接运算符 /262.7 常用函数 /262.7.1 聚合函数 /272.7.2 数值函数 /282.7.3 字符串函数 /292.7.4 日期时间函数 /302.7.5 数据类型转换函数 /312.7.6 控制NULL的常用函数 /322.8 流程控制语句 /322.8.1 条件判断语句IF…ELSE和CASE /332.8.2 循环语句 /35第3章 查询基础 /363.1 简单查询逻辑处理过程 /363.2 数据库对象的引用规则 /393.3 指定表的返回列来筛选列 /403.4 使用WHERE筛选行 /413.4.1 使用比较运算符过滤数据 /413.4.2 搜索范围内的值 /413.4.3 使用IN指定列表搜索条件 /423.4.4 使用LIKE关键字进行模糊匹配 /423.4.5 使用NULL比较搜索条件 /433.4.6 筛选时影响性能的注意事项 /443.5 格式化结果集 /443.5.1 在选择列表中使用常量、函数和表达式 /443.5.2 使用别名 /453.5.3 使用ORDERBY子句对结果排序 /463.5.4 使用TOP限制结果集 /483.5.5 使用DISTINCT消除重复行 /503.6 使用GROUPBY子句和聚集函数进行分组计算 /513.6.1 在查询中使用聚集函数 /513.6.2 GROUP BY使用基础 /523.6.3 使用HAVING子句筛选分组后的数据 /53第4章 多表联接查询和数据汇总 /554.1 联接基础知识 /554.1.1 在FROM子句中联接 /564.1.2 在WHERE子句中联接 /564.2 交叉联接 /574.3 内联接 /574.4 外联接 /594.4.1 左外联接 /594.4.2 右外联接 /604.4.3 完全外部联接 /604.5 自联接 /624.5.1 使用同一列进行自联接 /624.5.2 使用不同列进行自联接 /624.6 联接查询的逻辑处理过程 /644.7 多表联接查询 /644.8 UNION合并结果集 /644.8.1 UNION和UNIONALL /654.8.2 对合并结果集进行排序 /664.8.3 结果集的合并顺序 /664.9 汇总数据 /674.9.1 ROLLUP /674.9.2 CUBE /704.9.3 使用GROUPING SETS /704.9.4 GROUPING查看汇总行并区分NULL /71第5章 子查询 /735.1 独立子查询 /735.1.1 独立标量子查询 /745.1.2 独立多值子查询 /745.2 相关子查询 /755.3 使用IN(NOT IN)和EXISTS(NOT EXISTS)谓词 /765.3.1 IN和NOT IN /775.3.2 EXISTS和NOT EXISTS /775.4 表表达式 /815.4.1 派生表 /815.4.2 公用表表达式(CTE) /84第6章 开窗函数和行列转换 /896.1 窗口和开窗函数 /896.2 排名窗口函数 /906.2.1 使用ROW_NUMBER()进行分区编号 /916.2.2 使用RANK()和DENSE_RANK()进行分区排名 /946.2.3 使用NTILE()进行数据分组 /966.3 聚合窗口函数 /976.4 行列转换 /1006.4.1 行转列 /1006.4.2 列转行 /105第7章 数据修改 /1097.1 插入数据 /1097.1.1 使用INSERT和VALUES插入数据 /1097.1.2 使用SELECT INTO插入数据 /1107.1.3 使用INSERT和SELECT插入数据 /1117.2 删除数据 /1127.2.1 使用DELETE删除行 /1127.2.2 使用TRUNCATE TABLE删除所有行 /1137.3 更新数据 /1137.3.1 使用SET和WHERE更新数据 /1137.3.2 更新基于其他表的数据 /1137.4 使用MERGE合并数据 /1147.5 通过表表达式修改数据 /118第8章 数据完整性 /1218.1 数据完整性的类型和实现方式 /1218.1.1 域完整性及实现方式 /1228.1.2 实体完整性及实现方式 /1228.1.3 参照完整性及实现方式 /1228.2 实现实体完整性 /1248.2.1 使用主键 /1248.2.2 使用UNIQUE约束 /1278.2.3 使用自增列 /1278.3 实现域完整性 /1318.3.1 CHECK约束 /1318.3.2 DEFAULT约束 /1328.3.3 NOT NULL定义 /1338.4 参照完整性 /1348.4.1 实现表间列的参照完整性 /1348.4.2 实现表内列的参照完整性 /1378.5 使用关系图实现参照完整性 /1388.6 使约束失效 /1418.7 使用图形界面实现数据完整性 /1418.7.1 添加主键 /1418.7.2 设置UNIQUE约束 /1428.7.3 设置CHECK约束 /1428.7.4 设置默认值约束 /1448.7.5 设置外键 /1458.7.6 禁用约束 /147第9章 索引 /1489.1 数据的存储方式 /1499.1.1 页(Page) /1499.1.2 区(Extent) /1529.1.3 索引分配映射页(IAM页) /1529.1.4 估算表的大小 /153 9.2 B树(Balanced Tree) /1549.3 查看页内容的工具 /1569.3.1 DBCC IND /1569.3.2 DBCC PAGE /1589.4 堆(Heaps) /1609.5 聚集索引 /1629.5.1 约束与索引的关系 /1629.5.2 唯一聚集索引的物理结构 /1639.5.3 不唯一聚集索引的物理结构 /1679.5.4 使用聚集索引查找数据的执行计划 /1689.6 非聚集索引及其物理结构 /1699.6.1 在堆中的非聚集索引 /1699.6.2 在聚集表中的非聚集索引 /1729.6.3 使用非聚集索引查找数据的执行计划 /1759.7 修改数据对索引结构的影响 /1769.7.1 页拆分和行移动现象 /1769.7.2 插入行 /1789.7.3 删除行 /1799.7.4 更新行 /1809.8 碎片和索引维护 /1809.8.1 碎片 /1809.8.2 维护索引 /1829.9 复合索引 /1879.10 包含列索引 /1889.11 索引交叉 /1889.12 筛选索引 /1899.13 全文搜索 /1909.13.1 创建和修改全文目录 /1919.13.2 创建全文索引 /1919.13.3 全文搜索的查询方法 /1929.14 统计信息 /1949.14.1 了解统计信息的作用 /1949.14.2 查看和分析统计信息 /1959.14.3 创建统计信息 /1989.14.4 更新统计信息 /1989.14.5 同步和异步统计信息更新 /2009.15 基于索引设计的考虑 /200第10章 视图 /20210.1 视图简介 /20210.2 使用标准视图 /20410.2.1 创建标准视图 /20410.2.2 通过视图更新数据 /20610.2.3 修改和删除视图 /20810.3 视图选项 /20910.3.1 使用ENCRYPTION选项 /20910.3.2 使用SCHEMABINDING选项 /21010.3.3 使用CHECK OPTION选项 /21110.4 使用索引视图 /21210.4.1 创建索引视图 /21310.4.2 索引视图的性能 /21310.4.3 更新索引视图 /21410.5 视图的优点 /215第11章 存储过程 /21611.1 存储过程的类型 /21611.1.1 系统存储过程 /21711.1.2 扩展存储过程 /21711.1.3 用户自定义存储过程 /21711.2 SQL存储过程 /21811.2.1 创建无参数的存储过程 /21811.2.2 修改和删除存储过程 /22011.2.3 创建带参数的存储过程 /22111.2.4 获取存储过程的执行结果 /22311.3 存储过程示例分析 /22411.4 存储过程的解析特点 /22511.5 存储过程的编译、重编译 /22611.6 使用存储过程的优缺点 /227第12章 用户自定义函数 /22912.1 UDF简介 /22912.2 标量UDF /23012.3 内联表值函数 /23212.4 多语句表值函数 /23312.5 UDF的修改和删除 /23512.6 UDF的调用分析 /235第13章 触发器 /23913.1 触发器的概念和分类 /23913.2 DML触发器 /24013.2.1 两张特殊的临时表 /24013.2.2 insert触发器 /24113.2.3 delete触发器 /24213.2.4 update触发器 /24413.2.5 禁用和启用触发器 /24413.2.6 检测基于列修改的触发器 /24413.2.7 FIRST触发器和LAST触发器 /24513.3 使用触发器实现审核跟踪 /24613.4 DML触发器的工作原理和事务控制 /24613.4.1 触发器的工作原理 /24713.4.2 DML触发器的事务控制 /24813.5 DDL触发器 /24913.5.1 创建数据库级别的DDL触发器 /24913.5.2 创建服务器级别的DDL触发器 /250第14章 事务和锁 /25114.1 事务 /25114.1.1 显式事务处理模式 /25214.1.2 自动提交事务模式 /25314.1.3 隐式事务处理模式 /25314.1.4 嵌套事务的控制 /25414.1.5 事务、事务日志和检查点 /25514.2 并发访问引起的问题 /25714.3 锁 /26014.3.1 锁的粒度和锁升级 /26014.3.2 锁的类型和查看锁 /26114.3.3 锁的兼容性 /26514.4 设置事务隔离级别 /26614.4.1 SQL标准定义的4种事务隔离级别 /26614.4.2 行版本的事务隔离级别 /27114.5 隔离级别、锁和并发问题的关系 /27414.6 死锁 /275前言第1章 关系数据库 /11.1 关系模型基本概念 /11.2 E-R模型到关系模型的转化 /31.3 数据库设计规范 /61.3.1 第一范式(1NF) /61.3.2 第二范式(2NF) /71.3.3 第三范式(3NF) /8第2章 Transact-SQL概述 /102.1 启动SQL Server Management Studio(SSMS) /102.2 T-SQL语句的类型 /122.2.1 DDL语句 /122.2.2 DCL语句 /132.2.3 DML /142.3 T-SQL语法要素 /162.3.1 SQL语句的批处理符号GO /162.3.2 EXEC /172.3.3 注释符 /172.3.4 标识符 /182.4 变量 /192.5 数据类型 /212.5.1 字符串类型 /212.5.2 Unicode字符串类型 /232.5.3 日期时间类型 /232.5.4 数值类型 /232.6 运算符 /252.6.1 算术运算符 /252.6.2 比较运算符 /252.6.3 逻辑运算符 /252.6.4 连接运算符 /262.7 常用函数 /262.7.1 聚合函数 /272.7.2 数值函数 /282.7.3 字符串函数 /292.7.4 日期时间函数 /302.7.5 数据类型转换函数 /312.7.6 控制NULL的常用函数 /322.8 流程控制语句 /322.8.1 条件判断语句IF…ELSE和CASE /332.8.2 循环语句 /35第3章 查询基础 /363.1 简单查询逻辑处理过程 /363.2 数据库对象的引用规则 /393.3 指定表的返回列来筛选列 /403.4 使用WHERE筛选行 /413.4.1 使用比较运算符过滤数据 /413.4.2 搜索范围内的值 /413.4.3 使用IN指定列表搜索条件 /423.4.4 使用LIKE关键字进行模糊匹配 /423.4.5 使用NULL比较搜索条件 /433.4.6 筛选时影响性能的注意事项 /443.5 格式化结果集 /443.5.1 在选择列表中使用常量、函数和表达式 /443.5.2 使用别名 /453.5.3 使用ORDER BY子句对结果排序 /463.5.4 使用TOP限制结果集 /483.5.5 使用DISTINCT消除重复行 /503.6 使用GROUP BY子句和聚集函数进行 分组计算 /513.6.1 在查询中使用聚集函数 /513.6.2 GROUP BY使用基础 /523.6.3 使用HAVING子句筛选分组后的数据 /53第4章 多表联接查询和数据汇总 /554.1 联接基础知识 /554.1.1 在FROM子句中联接 /564.1.2 在WHERE子句中联接 /564.2 交叉联接 /574.3 内联接 /574.4 外联接 /594.4.1 左外联接 /594.4.2 右外联接 /604.4.3 完全外部联接 /604.5 自联接 /624.5.1 使用同一列进行自联接 /624.5.2 使用不同列进行自联接 /624.6 联接查询的逻辑处理过程 /644.7 多表联接查询 /644.8 UNION合并结果集 /644.8.1 UNION和UNION ALL /654.8.2 对合并结果集进行排序 /664.8.3 结果集的合并顺序 /664.9 汇总数据 /674.9.1 ROLLUP /674.9.2 CUBE /704.9.3 使用GROUPING SETS /704.9.4 GROUPING查看汇总行并区分NULL /71第5章 子查询 /735.1 独立子查询 /735.1.1 独立标量子查询 /745.1.2 独立多值子查询 /745.2 相关子查询 /755.3 使用IN(NOT IN)和EXISTS(NOT EXISTS)谓词 /765.3.1 IN和NOT IN /775.3.2 EXISTS和NOT EXISTS /775.4 表表达式 /815.4.1 派生表 /815.4.2 公用表表达式(CTE) /84第6章 开窗函数和行列转换 /896.1 窗口和开窗函数 /896.2 排名窗口函数 /906.2.1 使用ROW_NUMBER()进行分区编号 /916.2.2 使用RANK()和DENSE_RANK()进行分区排名 /946.2.3 使用NTILE()进行数据分组 /966.3 聚合窗口函数 /976.4 行列转换 /1006.4.1 行转列 /1006.4.2 列转行 /105第7章 数据修改 /1097.1 插入数据 /1097.1.1 使用INSERT和VALUES插入数据 /1097.1.2 使用SELECT INTO插入数据 /1107.1.3 使用INSERT和SELECT插入数据 /1117.2 删除数据 /1127.2.1 使用DELETE删除行 /1127.2.2 使用TRUNCATE TABLE删除所有行 /1137.3 更新数据 /1137.3.1 使用SET和WHERE更新数据 /1137.3.2 更新基于其他表的数据 /1137.4 使用MERGE合并数据 /1147.5 通过表表达式修改数据 /118第8章 数据完整性 /1218.1 数据完整性的类型和实现方式 /1218.1.1 域完整性及实现方式 /1228.1.2 实体完整性及实现方式 /1228.1.3 参照完整性及实现方式 /1228.2 实现实体完整性 /1248.2.1 使用主键 /1248.2.2 使用UNIQUE约束 /1278.2.3 使用自增列 /1278.3 实现域完整性 /1318.3.1 CHECK约束 /1318.3.2 DEFAULT约束 /1328.3.3 NOT NULL定义 /1338.4 参照完整性 /1348.4.1 实现表间列的参照完整性 /1348.4.2 实现表内列的参照完整性 /1378.5 使用关系图实现参照完整性 /1388.6 使约束失效 /1418.7 使用图形界面实现数据完整性 /1418.7.1 添加主键 /1418.7.2 设置UNIQUE约束 /1428.7.3 设置CHECK约束 /1428.7.4 设置默认值约束 /1448.7.5 设置外键 /1458.7.6 禁用约束 /147第9章 索引 /1489.1 数据的存储方式 /1499.1.1 页(Page) /1499.1.2 区(Extent) /1529.1.3 索引分配映射页(IAM页) /1529.1.4 估算表的大小 /1539.2 B树(Balanced Tree) /1549.3 查看页内容的工具 /1569.3.1 DBCC IND /1569.3.2 DBCC PAGE /1589.4 堆(Heaps) /1609.5 聚集索引 /1629.5.1 约束与索引的关系 /1629.5.2 唯一聚集索引的物理结构 /1639.5.3 不唯一聚集索引的物理结构 /1679.5.4 使用聚集索引查找数据的执行计划 /1689.6 非聚集索引及其物理结构 /1699.6.1 在堆中的非聚集索引 /1699.6.2 在聚集表中的非聚集索引 /1729.6.3 使用非聚集索引查找数据的执行计划 /1759.7 修改数据对索引结构的影响 /1769.7.1 页拆分和行移动现象 /1769.7.2 插入行 /1789.7.3 删除行 /1799.7.4 更新行 /1809.8 碎片和索引维护 /1809.8.1 碎片 /1809.8.2 维护索引 /1829.9 复合索引 /1879.10 包含列索引 /1889.11 索引交叉 /1889.12 筛选索引 /1899.13 全文搜索 /1909.13.1 创建和修改全文目录 /1919.13.2 创建全文索引 /1919.13.3 全文搜索的查询方法 /1929.14 统计信息 /1949.14.1 了解统计信息的作用 /1949.14.2 查看和分析统计信息 /1959.14.3 创建统计信息 /1989.14.4 更新统计信息 /1989.14.5 同步和异步统计信息更新 /2009.15 基于索引设计的考虑 /200第10章 视图 /20210.1 视图简介 /20210.2 使用标准视图 /20410.2.1 创建标准视图 /20410.2.2 通过视图更新数据 /20610.2.3 修改和删除视图 /20810.3 视图选项 /20910.3.1 使用ENCRYPTION选项 /20910.3.2 使用SCHEMABINDING选项 /21010.3.3 使用CHECK OPTION选项 /21110.4 使用索引视图 /21210.4.1 创建索引视图 /21310.4.2 索引视图的性能 /21310.4.3 更新索引视图 /21410.5 视图的优点 /215第11章 存储过程 /21611.1 存储过程的类型 /21611.1.1 系统存储过程 /21711.1.2 扩展存储过程 /21711.1.3 用户自定义存储过程 /21711.2 SQL存储过程 /21811.2.1 创建无参数的存储过程 /21811.2.2 修改和删除存储过程 /22011.2.3 创建带参数的存储过程 /22111.2.4 获取存储过程的执行结果 /22311.3 存储过程示例分析 /22411.4 存储过程的解析特点 /22511.5 存储过程的编译、重编译 /22611.6 使用存储过程的优缺点 /227第12章 用户自定义函数 /22912.1 UDF简介 /22912.2 标量UDF /23012.3 内联表值函数 /23212.4 多语句表值函数 /23312.5 UDF的修改和删除 /23512.6 UDF的调用分析 /235第13章 触发器 /23913.1 触发器的概念和分类 /23913.2 DML触发器 /24013.2.1 两张特殊的临时表 /24013.2.2 insert触发器 /24113.2.3 delete触发器 /24213.2.4 update触发器 /24413.2.5 禁用和启用触发器 /24413.2.6 检测基于列修改的触发器 /24413.2.7 FIRST触发器和LAST触发器 /24513.3 使用触发器实现审核跟踪 /24613.4 DML触发器的工作原理和事务控制 /24613.4.1 触发器的工作原理 /24713.4.2 DML触发器的事务控制 /24813.5 DDL触发器 /24913.5.1 创建数据库级别的DDL触发器 /24913.5.2 创建服务器级别的DDL触发器 /250第14章 事务和锁 /25114.1 事务 /25114.1.1 显式事务处理模式 /25214.1.2 自动提交事务模式 /25314.1.3 隐式事务处理模式 /25314.1.4 嵌套事务的控制 /25414.1.5 事务、事务日志和检查点 /25514.2 并发访问引起的问题 /25714.3 锁 /26014.3.1 锁的粒度和锁升级 /26014.3.2 锁的类型和查看锁 /26114.3.3 锁的兼容性 /26514.4 设置事务隔离级别 /26614.4.1 SQL标准定义的4种事务隔离级别 /26614.4.2 行版本的事务隔离级别 /27114.5 隔离级别、锁和并发问题的关系 /27414.6 死锁 /275

前沿

基础不牢 地动山摇

何去何从?

也许你正在大学学习数据库课程,也许你已从计算机或相关专业大学毕业,无论如何,你或多或少已听说了SQL、SQL Server、Oracle、DB、MySQL、Access等一大堆相关概念。倒底从哪里开始学?

 ;SQL的英文全称是StructuredQuery Language,也就是结构化查询语言。SQL Server、Oracle、DB、MySQL、Access这些都是数据库系统,是关系型数据库系统。而SQL正是我们与这些数据库系统进行交流活动的语言。

所以,可以说SQL是关系型数据库的基础。

不必在意你选择的是SQLServer、Oracel或者是其它什么数据库系统,只要把SQL吃透,用哪个数据库系统开发学习,大同小异,易如反掌。而考虑到实验环境搭建的便利性以就业等因素,从SQL Server开始学习数据库知识是现在主流的教学实践。

基础不牢,地动山摇

韩老师自从51CTO网络发布数据库视频课程以来,短短时间内已经有几十万人学习了他的课程,好评如潮。经过对学生的构成信息进行分析,我们发现,70%多的学生都是在大学期间已经学过这门课程的同学,他们为什么还要再次进行学习数据库知识?

从传统的计算机、网络、软硬件开发,到炙手可热的大数据、云计算、物联网,这些所有的技术像一座座高楼大厦拔地而起,数据库正如承载着这些建筑的地基。这就要求我们希望在IT领域某求发展或成功的学生,必须把数据库技术的学习作为一件基础任务,对任何概念或原理的不理解或似懂非懂,都可能让大厦面临不可预知的风险。

但显然,要想把数据库学好,有几个显而易见的困难。

其一,我们的传统数据库技术教材,一般较为晦涩难懂。这当然有其历史原因,IT技术当多数源自西方,我们起步时把西方的一些图书翻译过来作为我们的资料,很多教材也是源自这此最初的翻译资料。翻译这个事情,“失真”情况很不稀罕,对于初学者,书上有些内容看不懂时不必过早归结于是“自己”笨的原因。举个例子,“用例”这个词是面向对象编程中最常用的术语之一,对这个词,很多初学者一头雾水,咱们中国本来没这个词儿啊!到底是啥意思?关于用例的概念,很多教材中了不吝笔墨叭啦叭啦讲一大堆,结果是越讲越糊涂。有些同学为了弄懂就各种查呀找呀,最终发现人家英文名本来叫“case”,一般我们可翻译为“案例”,如果把书上的“用例”换成“案例”,多少学生将会因此在软件道路上可以走得更远更好?历史原因很客观,但这不能成为我们在学习过程中不求甚解的理由,更不能成为教材编写者“人云亦云”的理由。

其二,我们的传统教材,对理论及重难点的讲解创新极少,一般是比别人咋讲我咋讲。所谓创新,并不是要求我们老师来推翻理论。古时侯养孩子没那么多适合婴儿吃的食品,一般是母亲把大人吃的东西嚼碎然后再喂孩子吃。学生在学习新知识时,其实与婴儿吃饭无异,对于教材中涉及的对于学生来说难于消化的理论或知识点,老师如果仅是照本宣科给学习讲一遍,意义不大,一定得把这些东西先行掰开嚼碎再喂给学生。根本的办法是,编写教材的老师能够用心,争取自己编写的教材对于难点的讲解更通俗,更易懂,更有趣。

其三,传统的教材与职业需求脱节。限于教材编写者自身的业务水平与讲师的业务水平,造成了有时候授课老师只讲会讲的,不讲有用的。这样的学生毕业后,如果想找到理想工作,必须重新学习提高。

基础不牢,地动山摇。学习过程困难万万千,工作的岗位上更是如此,克难而进还是得过且过,是职业生涯平庸与卓越的核心要素。

数据库之Why &;How

很多同学在总结为什么自己的数据库技术没有学好的时候,会把原因归结为自己不努力、自己不刻苦等原因。自我反省是必须的,但很多同学都没想到或者想到也不敢说:“这个教材编写的水平太次!”

好教材的标准很多,但有几个标准是必不可少的,一要让人看得懂,二要让人容易懂,三要让人喜欢看,第四是学会要有用。

我以数据库学习过来人的名义,以及51CTO视频学院中数十万学过韩老师视频课程的学员的名义,郑重向广大数据库初学者推荐韩老师的这本书。韩老师的这本书,完全体现了其视频课程的生动有趣、深入浅出、紧贴职业需求的特点,系统性却有大幅度提升。这是一本充满创新、真正经典、与时俱进、与众不同的数据库教科书。

周春元

本书策划编辑

跟韩老师学SQL Server数据库设计与开发 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:跟韩老师学SQL Server数据库设计与开发