数据库课程知识块点

版权声明:本文为博主原创文章,经博主允许,可自由共享,尽量不要用于商业用途。 https://blog.csdn.net/matrixbbs/article/details/90369701

第01部分:数据库学科内容涉及到的核心思想方法

名称: 内容体现: 相应扩展部分: 应用适应面:

最后的综述:

数据库课程学习过程中的思想方法体现 1分层思想 在三级模式两级映像知识点中,充分体现了分层的思想方法。这种思想方法源自数学上的微分思想。 整体上,复杂的体系一般情况下都会做分层。层内体现专业和专注,层间体现接口和联接。 有了层,就一定会有独立性体现出来。 有了层间,就一定会有灵活性体现出来。因此就会具有更广泛的适应性。这一点,如果把接口做得更具有特点和通用性,则可以进一步挖出来的技术思想是缓冲思想。

2模块化思想。 在视图封装,存储过程封装和函数封装中,均体现了模块化的思想方法。 视图实现了对数据的封装 而存储过程和函数体现了对操作和转换过程的封装 模块化本身是封装过程,模块化的应用是体现了复用的过程,而模块化的大量、广泛应用则体现了标准化 模块内体现独立性,模块之间体现的是联连和接口,也就是灵活性。 一个体系整体,全面看是整体,局部看是部分,涉及到整体部分的哲学思想。

3计算思维和互联网思想。 计算机是工具 互联网是工具 大数据是资源 有和没有这种工具,人们的思维方式应该是不一样的。它们是工具,它们更是思想方法。主动地拥抱它们和被迫去接受它们,结果是不一样的。

4优化思想 整体和全局的角度,多角度多维度权衡给出最优的结果。 用现实和实验来感知,用理论方法来抽象扩展,争取触及到边缘,从而最终给出理论上的最优结果和实现可行的最优方案。

5极限思想 触及到边界或是边缘的最一般的方法,就是极限的思维方式。 这里也有最大限度毛估的思想方法。毛估比不估好,用最小的成本,换回最大的收益,是主动求解最优,而用最小的成本,规避最大的风险,是主动排除最差。 用理论的方式思考整体的形态,这种思维方式和方法,可以给实际的行动带来参考和指导意义。 反复迭代的方法 虚拟模拟的方法

6守恒的思想和等价代换取舍 CPU时间和内存空间,需要从理论上去权衡,更需要从应用上去试出最平衡的那个点位。 计算机和数据模拟与虚拟化的方法,给了人们更好的工具,但这种思想方法首先要理解。

7正向推进和逆向推理,都是方法。在过程中,还多次模拟和多次迭代,确实是常用的方法。

8事物是有联系的宏观思想

扫描二维码关注公众号,回复: 6438286 查看本文章

9事物是不断地变化的思想

10暴力真不是什么好方法,但确实很管用

11规范化、标准化思想

12大招:抽象思维方法

13简单原则

互联网思想:概念,术语;示例,应用

大数据思想

自顶向下,逐步求精思想

分而治之的思想

数学建模思想与模型化思想

模块化思想

分层思想

平衡与最优化策略思想

功能与性能
资源与维护
时间与空间
人力物力财力与工作量
可行性
第02部分:数据库系统概述基本知识

概述

数据与信息

数据 —知识块— 数据无处不在 当今的“数字化生活”,购物,取款,支付,物流,考证,就医,学习,办公自动化,协同,娱乐游戏,社交,金融投资,一切都是数字化生活。我们是数据化时代的原住民。 近一点,在学校里,学籍(学生信息,成绩信息,课程信息),户籍(招生,就业,迁入迁出,就业),食堂(饭卡),寝室(门禁),QQ,微信,微博等等 在数字化的生活里,你们取得了很多成功,比如注册成功,登录成功,秒杀成功,配对成功,上线成功,留言成功,但可能都发现了自己一个最大的不足:余额不足。 在数字化的生活里,我们自由,我们快乐,我们享受,我们承受。其实数字本身也许我们并不怎么太在意了,因为它就像空气一样,存在在我们周围,我们在用它,但我们快要感觉不到它了。但数字体现出来的信息,是我们永远都无法忽略的。 这是一个数字化的时代,是一个信息时代。
何为数据,通常所说的数据是指什么?计算机的数据如何表示? 数据的类型、语义、存在形式是什么?为什么有这么多种数据类型,为什么要进行数据的转换?数据的最终展现形式是串?这个怎么理解? 数据库,库的特点是大而多,但这是一个相对的概念。库更多的是要体现出对大而多的内容的管理能力(存储效率、存取管理、加快检索、方便用户、提供可靠和安全)

信息
内存数据与磁盘文件
数据库
数据库管理系统
数据库应用系统
DB、DBMS和DBS之间的逻辑关系 —知识块— 数据库,database=DB 1它有组织,有结构,方便存取数据; 2可以长时间、大量的存放数据;数据可以变化增长;可以体现变化,体现联系 3可以多用户、多应用共享数据; 4数据库是统一的整体:结构化、少冗余和高独立性。
我们处理数据是为了得到知识,或者说叫规律,而不是为了得到另一些数据。

数据库管理系统DBMS特点:可靠,安全,高性能,高弹性(可伸缩性) 数据库系统DBS特点:数据共享、减少冗余、提高数据独立性、增强安全性和可靠性 具体的商业数据库:方便用户、追求性能、追求可扩展性、追求稳定性等

功能:定义数据,操纵数据,织组与存储数据,事务管理,维护功能(建立,转换,转储,重组重构,监视),通信接口,安全管理(包括用户管理) 数据完整性功能和实现 数据安全性功能和实现

数据,数据库,数据库管理系统,数据库系统组成 DBS>DBMS>DB>Data DBS=硬件+软件+数据库+人员 DBMS=专门的操纵和管理的数据库的软件 DB=数据库,是一个逻辑概念 Data即数据

数据库系统DBS,数据库应用系统 人和物 人:用户,程序员,设计人员,系统管理员,数据库管理员 EU端用户,AP应用程序员,SA,DBA 物:计算机系统,数据库管理系统,应用程序,数据库(库和数据) 计算机系统:硬件,软件,网络==》云(用软件定义它)》环境 数据库管理系统:数据库和管理》核心 应用程序:界面==》人机接口,呈现

数据库管理系统DBMS主要功能 数据定义:各种模式,结构 数据操纵:增删改查 数据库运行管理:并发、安全性、完整性、索引等维护。 数据组织、存储和管理:字典、用户数据、存取路径等。 数据库的建立和维护:create/alter/drop 数据通信接口:数据库引擎,如ado

面向行业划分 面向内容划分 面向应用划分 面向用户划分

数据库发展过程及现状

历史上的三个阶段 —知识块— 发展阶段 人工管理:程序处理数据(代码和数据,不能长期保存,没有软件,甚至没有OS,无法共享) 有某个数据组需要处理时,直接针对性编制程序来处理这些数据,数据用程序直接管理。 给人的印象是:多个程序。 典型:C语言程序直接处理数据,数据在程序里面。 文件系统管理:程序处理文件(长期保存,程序和数据有了一定的独立性,即APP和DATA可适当分离,有了文件系统功能,OS带这个功能) 有了明确的文件管理系统(一般包含在操作系统中),数据用文件方式管理。 给人的印象是:多个文件。 特点:数据冗余大;数据独立性差;数据一致性差; 典型:C语言程序管理文件,数据在文件里面。 数据库系统管理 专门的控制和管理数据的功能软件,数据用DBMS管理。 给人的印象是:一个数据库/数据库服务器。 特点:结构化;共享性高、冗余度低、易扩展;独立性高;数据由DBMS统一管理 典型:C#语言程序开发数据库管理应用系统,数据在数据库里面。 新阶段: 技术交叉与融合 数据模型(多种模型并存:层次、网状、关系、半结构化关系、面向对象、对象-关系) 数据类型(复杂多维度数据类型) 数据分布(开放、多边、并发、并行) 互联网、物联网、移动技术
现阶段的发展状况 —知识块— 数据库技术上的发展趋势 诱因: 1新的领域、新的应用、新的协同中的技术变革,基础在变,应用肯定要变; 2信息处理新环境下的数据库问题,如传感技术、物联技术; 3大量复要的数据集,它们的存储、处理、集成等。 发展方向: 信息系统集成技术,不论是形式还是内容,都越来越复杂。 数据流管理技术,数据量越来越大,时效性要求不一样。 传感器数据库技术,信息源爆炸式增长。 XML数据管理,统一的界面和格式展现方式。 网格数据管理,一切皆为网格或是数据,云服务。 DBMS的自适应管理,智能化的数据库。系统可以自动调优和自动管理工具匹配。 移动数据库,终端会一直都存在,它是实时的,是分布式服务的方向。 微小型数据库技术,终端不可能干干净净,一点数据都没有。 数据库用户界面,人机交互,数据的操作界面和呈现方式,界面是永恒的话题(键控、触控、光控、体感、声感)。
数据库系统的组成与逻辑结构

—知识块— DBS DBAS的应用体系结构 集中式,也叫主从式(主机与端系统) 如:单机、客户机-主机、小型联机系统(内部网络) 网络数据库系统 C/S模式:QQ程序与腾讯服务器(胖客户与瘦客户) B/S模式:浏览器与WEB服务器 大型联机系统(互联网络) 分布式数据库系统/并行数据库系统 每个节点能独立处理、高性能发挥 节点之间可以协调配合 可靠性可用性高 系统灵活高效,易于扩充

物理组成
逻辑结构划分
三级模式和两级映像
外模式【用户,视图】
模式【逻辑,概念,全局】
内模式【物理,存储,存取】 —知识块— 三级模式两级映像 外模式、子模式、用户模式==》一定会有多个 划分与隔离数据,保证安全 与业务对口相关,保证专业 模式、逻辑模式、概念模式==》有且只有一个 公共全局:只是逻辑上存在 数据项,名字,类型,取值,关系关联,完整性与安全性 内模式、存储模式、物理模式==》有且只有一个 具体数据结构与存取方式 记录类型 存储方式 索引方式 外模式/模式映射关系:有多个 模式/内模式映射关系:唯一
分层思想 体现独立性、专业性、降低层内的复杂性 体现灵活性

学生自己可能参与的部分
数据库系统的特点

有无数据库系统的对比
数据库系统本身独有的功能特点讨论
数据库系统对于现代软件的贡献
数据库管理系统的定义与功能特点

对逻辑概念的理解
数据模型

—知识块— 数据模型 模型:一种认知抽象描述。对现实对象的模拟和抽象。 概念模型:conceptual data model,事物及联系的抽象描述。最常用的事ER方法。 逻辑模型:logical data model,最常见的有:层次,网状,关系,面向对象,对象关系,NoSQL系列 物理模型:physical data model 核心方法:抽象,通俗的理解就是去掉不重要的,把握本质核心。

数据模型的要素 数据模型三部分 数据结构:怎么组织数据 数据操作:查询与更新 完整性约束:保证正确性、有效性和相容性 关系数据模型: 结构:表结构 操作:insert,update,delete,select 约束:PK,FK,UQ,Null,DF,CK
概念数据模型
逻辑数据模型
物理数据模型
典型的数据模型 —知识块— ER模型 元素:长方型、椭圆、菱型、直线及标记 设计: 理解需求结果 确定实体及属性>确定联系类型及属性>确定码>画ER图 画图过程: 用户分ER图->局部ER图->全局ER图 全并操作,统一命名 工具: 手工、Visio或其它
—关系模型基本术语— 关系:二维表 元组:记录,行 属性:字段,列 域:值域或者业务允许的取值范围 值:具体的取值 主码:唯一标志 分量:属性列值 关系模式:A(a1,a2,…,an)

—知识块— 其它模型 层次模型: 节点,分支:树-根、茎、枝、叶 有向树,一对一,一对多可行,多对多实现很复杂。 网状模型: 节点,连边:图或者是网,几乎可以描述一切 虽通用,却复杂 关系模型: 特点:表与表间关系;关系代数为基础,结构简单,数据独立性高;简单易用,但存取效率低 优势:对用户提供了较全面的操作支持,功能全面;得到了众多开发商的支持,市场驱动力巨大【外部原因】。 —知识块— 关系数据库:一些相关的二维表和其它数据库对象的集合。 表和其它对象(视图,存储过程,自定义函数等) 关系数据库基本概念 关系:名,型 元组,属性(名,型,值,域),关键字(key键、码)【单关键字,组合关键字】,外部关键字 键可以有多个,即候选键有多个,但主键只能有一个 外键<>外部关键字:因为外键只要求唯一,而外部关键字一定要求是另一个关系的主键。 候选码,主码,全码,码,主键,自然键,人工键,外码,外键 关系模型 结构:关系数据结构 表(列) 操作:关系数据操作 查询与更新 完整性:关系完整性约束 实体、参照、业务定义完整性 关系代数 关系数学定义: 集合:对象构成了元素。整张表。 姓(赵,钱,孙,李) 排行(伯,仲,叔,季) 名(龙,翔,凤,翥) 元组:元素的有序组构成了元组。一行即一个元组。 集合变化:积,积会产生新的元素。 姓排行名->姓名 关系:积的任意子集。整个表是关系集合,某一行是它的元素。

传统的集合运算:并,交,差,笛卡尔积=积
专门的关系运算:投影,选择,连接,除
投影肯定要给出列取舍
选择肯定要给出行筛选
连接肯定要给出拼条件
除一定要求两个集合有相同的部分

其它常用运算:比较运算、逻辑运算
用R和S各种举例讲解说明
商业数据库介绍

主流商业软件公司和行业领导者
标准制定与实际执行
市场导向与选择
第03部分:关系数据库

学生课程成绩表的问题与解决方法

关系代数与关系运算

关系模型基本术语: 实体、属性、码、域、联系 学生,研究生,本科生,【学号/工号/病号/警号/球衣号/会员号,姓名,年龄,性别】 实体型、实体值:结构和内容。结构相对固定,内容可有可无、可多可少。 双实体联系:一对一,一对多,多对多 多实体联系:??? 实体内部联系:经理与员工(经理同时也是员工,但经理管理员工或者是树目录结构)

传统代数运算
专门的关系运算
形式化语言描述和理解
图形式描述和理解
函数依赖

—知识块— 函数依赖

所谓函数依赖是指关系中一个或一组属性的值可以决定其它属性的值。函数依赖正象一个函数y = f(x)一样x的值给定后,y的值也就唯一地确定了。 X->Y,X起决定作用 X包含了Y,X决定了Y,即平凡函数依赖 X=这个班所有人都是学霸(你就是这个班的), Y=你是学霸 X->Y 类似: 四川夏天很热,成都夏天很热。 四川妹子很乖,成都妹子很乖。 更形式化一些的理解: 整体决定了整体或是部分。 学号确定了学号,工号决定了工号,所有自己决定自己的情况,都是非平凡的。 (学号,课程号)->学号,(学号,课程号)->课程号,这是显然的。学号和课程号都确定了,那学号或者是课程号肯定是确定的。 X不包含Y,X决定了Y,即非平凡函数依赖 学号->姓名,学号->性别,学号->年龄。即一旦学号确定了,对应的该学生的姓名、性别、年龄就都确定了下来。反过来,就可以知道,学号起到了决定作用。

属性之间的依赖关系完全由各属性的业务假设【参考实际应用和实际意义】来决定。 比如 商品(编号,名称,型号,厂商,批次) 订单(顾客号,商品号,收银号,商品名称,数量,单价,折扣) 成绩(学号,姓名,性别,年龄,课程号,课程名称,平时成绩,考试成绩) 谁起决定作用?【单个起决定作用,群组起决定作用】 完全、部分、传递 码、候选码、主码primary key、全码、外部码/外码foreign key 外码一定要求是码,而没有要求是主码,但如果称为“外主码”则一定是要求为主码 外键一定要求唯一,但外部关键字一定要求是主键 关键属性=关键字=主键=主码、候选关键属性=候选关键字=键=码 主属性、非主属性 码清楚了,主属性才会清楚

关系模式的规范化 必要性 冗余大会导致异常(插入,更新,删除) 小朋友分玩具(玩具编号,小朋友编号,姓名,性别,监护人,分配日期,数量,型号,品牌,厂家,赞助商) “别以为小朋友分了玩具一定是拿去玩,也有可能是拿去摆放,或者拿去洗干净” 用这一张表,打算记录 玩具信息 小朋友信息 小朋友分玩具的信息 起到决定作用的属性:玩具编号,小朋友编号 因为: 玩具编号->型号,品牌,厂家,赞助商 小朋友编号->姓名,性别,监护人 一起->分配日期,数量 因此,存在异常 显然数据有大量重复,有多少个小朋友,同一件玩具就有可能重复多少次 同理,有多少件玩具,小朋友也可能重复多少次

插入有异常:如果有的玩具还没有分配给小朋友,玩具信息无法入库
同理,小朋友如果未分配玩具,小朋友信息也无法入库

删除异常:可能在删除玩具信息时,把小朋友信息也删除了,反之亦然

更新异常:改小朋友名字要多行同时做到一改全改,否则出现矛盾
本质原因 小朋友信息、玩具信息、小朋友分玩具信息,三个信息混编在一个表里,没有独立开,对一种信息的操作总是易引起另一信息的反应导致了异常发生。 解决之道 进行规范化操作,进行适当的模式分解 基本要求 (1)元组的每个分量必须是不可分的数据项 对集合和集合的元素要认知清楚,取最简单化、最小化的原则 (2)数据库中的数据冗余应尽可能少 重复的数据量【存储空间,一致性维护工作量和风险,查询统计额外动作多】 外码肯定是不可消除的数据冗余,这是必须的,但应将数据量控制在最小值 (3)关系数据库不能因为数据更新操作而引起数据不一致问题 (4)插入数据时,数据库中的数据不能产生插入异常 (5)数据库中数据不能在执行删除操作后产生删除异常 数据不足不能正常插入,删除了多的数据,不论怎么更新,数据本身不应相互矛盾 (6)数据库设计应考虑查询要求,数据组织应合理 追求高效和简洁。对于查询实时性高、频度大的数据,可应用视图、索引和增加冗余的办法以空间换时间

基本知识: 一范式:不可再分,元子化,它是最基本的。 关系型上是不可再分的最小单位 关系值上是不可再分的最小单位 它是规范化的最低要求。 二范式:每个非主属性完全依赖于码,如果还有部分依赖,说明可以再分。 三范式:每个非主属性即不部分函数依赖于码,也不传递依赖于码,如果还有传递,说明可以再分。 一般情况下,要求如下: 每个表都必须有主键 每个表都通常要求达到三范式要求

BC范式:三范式只强调了非主属性对码的直接完全依赖,而没有强调主属性也这样,BC范式补上了这一点,因此BC范式比三范式更严格。
可以认为,达到BC范式要求,肯定是达到了三范式要求,反过来不一定。

其实,整体上只有一个要求:让决定因子起到单纯的直接的决定作用。
即表上所有非关键字的列,全部只依赖于整个关键字。
无部分函数依赖
无传递函数依赖
无多余的决定因子
模式分解 无损:信息没有丢失,依赖关系没有改变。 分解要具有无损连接性:连接后可以找回原来的信息,不多不少。 分解要保持函数依赖:决定和被决定关系不改变。 分解既要有无损连接性,又要保持函数依赖 目标:到三范式即可。

好的关系模式的4个最基本的条件: 数据冗余度低;没有插入异常;没有更新异常;没有删除异常;

但分解不是绝对的解决问题的有效方法。因为分解也会有代价,分得越多,意味着在使用过程中,连接会越多,这样就会增大系统的开销。 我们要追求一种平衡,找到一种最合适的分解程度。

插入一段通俗的解释。在PPT中有。

平凡与非平凡
完全
部分
传递
数据的决定性与依赖性
表内数据的独立性与表间数所的参照性
规范化理论

1范式
2范式
3范式
模式分解

分解的方法
分解准则与最终选择,实际工程应用的选择

关系数据库的优点

关系数据库方式与NoSQL大数据方式的适用情况讨论

第04部分:关系数据库语言SQL

—知识块— SQL的工作原理 SQL请求>DBMS>DB>DBMS>Data SQL的功能划分 数据查询语言:select 数据定义语言:create/backup/restore/alter/drop 数据操纵语言:insert/update/delete 数据控制语言:grant/revoke/deny

具体的商业数据库sqlserver2000数据库下的对象:表,视图,索引,存储过程,约束,规则,默认值,触发器,登录,用户,角色和组 SQLServer2000数据库的文件组成:文件集(主文件组(主数据文件,次数据文件),次文件组(次数据文件),事务日志(事务日志文件)) 文件和文件组不能由一个以上的数据库使用 文件只能是一个文件组的成员 数据和事务日志信息不能属于同一文件或文件组 事务日志文件不能属于任何文件组 SQLServer2000的系统数据库 master 主要信息 tempdb 临时表和临时存储过程 model 模板库 msdb 调度警报和作业 pubs/northwind 图书出版公司/北风贸易公司 特殊格式 临时表或存储过程:#,##, 局部变量和全局变量:@,@@, 名字有空格的处理:’’,[] create table [我的 朋友圈] ([编 号] char(4),[称 呼] char(10)) go select * from [我的 朋友圈] --如果没有括号,则语法出错 select * from 我的 朋友圈

—知识块— SQL语言 特点: 功能强大、语法统一、易学易用 直接用DBMS解释执行 操作对象和操作结果都是集合 高度非过程化语言【只发命令,不管实现细节】 数据类型: 串型:char,varchar,nchar,nvarchar,text,ntext 值型:bit,tinyint,int,bigint,float,real,decimal,numeric,smallmoney,money 时间型:date,time,smalldatetime,datetime 大类型:binary,varbinary,image 其它型:timestamp,sql_variant,table,uniqueidentifier(GUID型),null/unknown 每个表都应有主键,有自然键尽可能用自然键,没有适合的,建议使用人工键identity(1,1)

空值:未填写,未知,不可用或将在以后添加的数据。 不能认为两个空值可以相等,因为这没有意义 空值只能判空,不能做其它的运算 空值只能用is null或是的is not null来判断,不能用=null来判断

建表 primary key foreign key unique default identity(seed,increment)

newid()
getdate()

columnName as computed_column_expression 总评成绩 as 平时成绩0.4+考试成绩0.6
计算列在使用时的注意点:不能手动赋值;不能使用默认值,外键约束和非空值约束;计算列的参与列与定是可计算列
update 要更新的表名 set 列名=调整表达式 where 筛选条件

update 要更新的表名 set 列名=(select …) from 表a,表b,… where 表连接条件 and 筛选条件

update 要更新的表名 set 列名=调整表达式 from 表a,(中间集) as tmpTableName,表b where 表连接条件 and 筛选条件 比如,对销售情况最差的10件商品进行降价 update goods set unitPrice=unitPrice*0.9 from goods, ( select top 10 goods_id,sum(order_Num) as total_Num from sell_Order group by goods_id order by total_Num desc ) as totalSum where goods.goods_id=totalSum.goods_id 可见,与select语句相比,就只是select部分不一样。 即 select … from … where … update tName set… from … where … delete tName from … where …

truncate table tName

—知识块— 在存储过程中,常常用到“表变量”和“临时表”技术,作为中间表来存储数据和转换数据 在临时表 create table #T (…) 和表变量 declare @T table (…) 之间主要有3个理论上的不同 第一个不同使事务日志不会记录表变量。表变量回滚无效。 第二个不同是任何一个使用临时表的存储过程都不会被预编译,然而使用表变量的存储过程的执行计划可以预先静态的编译。 预编译一个脚本的主要好处在于加快了执行的速度。这个好处对于长的存储过程更加显著,因为对它来说重新编译代价太高。 也就是说:表变量处理会比临时表更快。 第三个不同:表变量仅存在于那些变量能存在的相同范围内。 和临时表相反,它们在内部存储过程和exec(string)语句里是不可见的。它们也不能在insert/exec语句里使用。 也就是说,表变量当作表来用时,没有临时表那么灵活。特别是insert操作。 在什么情况下使用表变量来代替临时表: 取决于以下三个因素: 插入到表中的行数。本人认为最好是小于1000行,具体情况具体分析. 从中保存查询的重新编译的次数。 查询类型及其对性能的指数和统计信息的依赖性。 在某些情况下,可将一个具有临时表的存储过程拆分为多个较小的存储过程,以便在较小的单元上进行重新编译。 个人建议,当记录行小于1000行的情况下,应尽量使用表变量,除非数据量非常大(大于1000行)并且需要重复使用表。在这种情况下,可以在临时表上创建索引以提高查询性能。但是,各种方案可能互不相同。 Microsoft 建议您做一个测试,来验证表变量对于特定的查询或存储过程是否比临时表更有效。

SQL的功能划分

SQL的起源,版本和特点

SQL用于数据处理

数据类型
变量与表达式
流程控制
典型的数据读入与输出
模块化
存储过程
自定义函数
事务处理
简单SQL编程 —知识块— T-SQL程序设计 数据类型 常量变量 运算符与表达式 常用例子与函数 流程控制 语句块begin…end 注释 选择控制 if…else…/if … else if … else… case when then else end/简单case函数;case搜索函数 label: goto跳转 return返回:无条件退出,不再执行之后的任何语句 waitfor调度 循环控制 while/continue/break 批处理 SQLserver会把批处理作为一个整体进行分析、再优化、编译、执行 它作为一个不可分的实体在服务器上解释和执行 单语句是一个批处理 存储过程、触发器是一个批处理 由exec(‘string’)执行的字符串是一个批处理 由sp_executesql’string’执行的字符串是一个批处理 go是批处理的结束标志,编译器执行到GO时,会把go前面的所有语句当成一个批处理来执行。 游标 特点:逐行处理 种类:T-SQL游标;API服务器游标;客户游标 使用:
declare myCurName cursor decalre @myVarName dataType for sql_statement open myCurName fetch next from myCurName into @myVarName while @@fetch_status=0 begin …print @myVarName… fetch next from myCurName into @myVarName end close myCurName deallocate myCurName

第05部分:数据库设计

数据库设计过程

数据库设计方法与工具

数据库设计技巧(从需求到ER图再到表)

实体,联系,属性
联系的类型
复杂的属性
复杂的联系
数据库表的规范化及理论现实意义

逻辑数据库的设计与物理实现

实际应用中的DBA进一步的设计实现工作

视图对数据的封装
索引对查询的优化
约束取舍对于大数据性能的提升
存储过程对于数据和控制操作的限定
自定义函数更方便用户个性化数据处理
用户角色限权的统一规划
备份与恢复策略的定制
数据库设计简单实例

—知识块-- 软件开发周期 需求分析 概要设计 详细设计 编码实现 测试 运行维护 数据库设计 特点:综合性强,涉及技术、管理、数据、各门学科知识、各行业知识、综合能力 步骤:需求读解->概念设计->逻辑结构->模型优化与子模式设计、索引及查询优化->函数与存储过程设计及优化->物理实现 具体内容:数据字典与数据流(数据与处理)->ER图(实体属性联系)->关系表(主键与外键)->存储路径(文件组与路径及文件)->实现(create…) 合并ER图要解决的冲突 属性冲突:域值,取值单位,形式与格式 命名冲突:同名异义,异名同义,结构冲突 消除冗余,兼顾效率

ER图向关系模型的转换 原则:简单至上 KISS keep it simple,stupid! 一个实体转换成一个关系,实体属性即关系属性,实体码即关系码; 学生(学号,姓名,性别,专业,年级,班级) 一对一联系,往任意一端合并,添加外键参考; 班长(学号,姓名,性别,班序号) 班级(班序号,班全称,班简称) or 班长(学号,姓名,性别) 班级(班序号,班全称,班简称,班长) 一对多联系,往多的一端合并,添加外键参考; 学生(学号,姓名,性别,专业,年级,班级) 班级(班序号,专业,班全称,班简称) 专业(专业号,专业名称,所在学院,描述) 学院(学院号,学院名称) 多对多联系,独立成关系,要注意码的组成和参考关系。如果太复杂,可以加人工键。 学生(学号,),课程(课程号,),成绩(学号,课程号,)/选修(选修号,学号,课程号,) 教师(工号,),课程(课程号,),讲授(讲授号,工号,课程号) 顾客和商品,运动员和比赛项目,消费者和产品,医生和病人 自联系 员工(工号,姓名,性别,民族,职务,上级职务) 员工(工号,姓名,性别,民族,职务,基本工资)+领导(领导工号,被领导工号)

优化:进行适当的模式分解,检查达到三范式要求即可。 过程:一范式进化到二范式,二范式进化到三范式。 具体步骤: 一到二 (1)确定主码,确定部分依赖关系,找出部分函数依赖的决定因子和被决定因子 (2)从原表中删除被决定因子 (3)决定因子与被决定因子独立成表,建立外键参考关系 二到三 (4)确定主码,确定传递依赖关系,找出相关因子 (5)从原表中删除被决字因子 (6)传递因子与被决定因子独立成表,建立外键参考关系

最后全面检验是不是都达到三范式要求。

—知识块-- 具体设计行为 DBName TableName,PK,DF,Null,Not Null,Unique ColumnName,ColumnType,length ConstraintName,expression Foreignkey and References index/unique ------后续设计 view proc login/user/role/grant backup job

从数据分析到库表实现

学生课程
运动员与参赛项目
商品与客户
作者与图书
作者与地址
网店与店主
职位与职位调动
从需求分析到库表实现

从自然语言描述到实现数据库的全过程
需求分析
概念设计得到ER图
逻辑设计得到表
物理设计
进一步的思考
视图
索引
存储过程
自定义函数
优化
第06部分:数据操作

从库到表

服务器注册
服务器登录
数据库用户,创建数据库
库表对象:表,视图,存储过程,自定义数据,约束,默认值,规则,自定义函数,用户,角色
临时对象:临时表
临时表技术的应用【暂存数据,自动清理】
对象操作:创建,修改,删除
对象控制:授权,回收权限
表中装数据

逐行插入
批量插入
导入
分布式导入
数据基础操作(增删改查)

插入
insert into
select into
删除,清除
delete
truncate
更新
update set
各种查询操作

—知识块— select查询语句:单表查询、连接查询、子查询 单表查询: select子句部分 from子句部分 where子句部分 比较运算>,>=,<,<=,=,<>,!=,!>,!< 逻辑运算and,or,not 限定范围between…and/ not between…and 确定集合in/not in 模糊查询like /not like 配合通配符:%,,[],[^] 思考:如果字符串匹配时,字符串里面出现了_或是%,怎么匹配呢?要用到转义字符方式。escape短语 比如文件名是以"省份_xxxx"形式的 select * from myTable where sfName like '河南%’ escape’’ 判断空值is null/is not null 判断存在exists/ not exists 使用聚合函数 count,avg,sum,max,min group by 子句部分 having子句 order by 子句部分 asc,desc 连接查询:是SQL的特色 子查询: Where子句与having子句都表示查询的条件,但作用对象不同。 前者作用的是表或是视图集合,从中选择满足条件的记录。后者作用于组,从组中选择满足条件的记录。 前者作用于原始的集合和元素,后者作用于分组后的集合和元素 前者先执行,后者后执行 后者一定要有group by存在

各子句部分整体介绍与要点介绍:select部分,from部分,where部分,group by部分,order by部分 特别是where子句,复杂与分类 联接查询,自联连查询 子查询 不相关子查询和相关子查询 具体的子查询的实现:exists,in,any/all/some,=,<>,> 对于all,some,any的理解 any表示集合中的任意一个值;all表示集合中的所有值;而some一般不用,它与any等价 理解上,显然是这样: >any,即需要大于集合中任意一值,即只要大于集合中最小的那个值,就是满足条件的 <any,即需要小于集合中任意一值,即只要小于集合中最大的那个值,就是满足条件的 >all,即需要大于集合中所有的值,即需要大于最大的值,才满足条件 <all,即需要小于集合中所有的值,即需要小于最小的值,才满足条件 集合查询 union,intersect,except union操作,强调相同的结构,不强调相同的内容。对列数,列类型匹配作要求,但对具体的数据不作业务上的对应要求。

数据操纵 insert into … values… insert into select… select into…

update … set …

delete from …
基础查询

无条件
单源
列整理
所有列
原始列与别名列
衍生列
计算列
转换列
生成列
统计列【聚合列】
最大
最小
计数
求和
求均
行整理
全部与去重处理
结果排序
结果聚合
聚合后条件过滤
汇总应用
带条件查询
比较
集合包含
范围限制
逻辑复合
判断存在
判断为空
串匹配
精确比较
模糊匹配
通配符:%和_
结果处理
排序
重定向输出
并集处理【新版本中,可直接进行差集,交集处理】
分组统计与筛选
group by
having
汇总运算
computer
computer by
与excel中的分类汇总对比来理解
先排序,后汇总
数据维度上的变化
注意事项
连接查询

交叉连接与迪卡尔积
外连接



内连接
两张以上的表的连接方式
表连接的原理【参考字段的来历】
表连接条件的表示位置
join … on 格式
from … where …连接条件…
等值连接与不等值连接
自然连接
子查询

单值

多值
any
all
in
一个查询的结果在另一个查询中的应用位置
select
from
where
对于查询的执行过程的讨论和查询效率的讨论

将查询结果封装为视图

—知识块— 视图:虚拟表,基于基本表 视图中的记录由执行一个查询语句所得到的查询结查所构成。理解了查询语句,就理解了视图。 为了专业和安全,端用户永远只看得到视图

特点: 以多角度观察数据 简化操作 安全隔离 逻辑独立实现 create view … as sqlstatement 注意画图来表示和讲解 更新视图,实为更新视图里数据,有是限制的 视图一般作业显示数据的窗口,而不进行数据的更新操作。

视图提供的方便和安全性讨论

第07部分:数据的完整性约束

—知识块— 创建主键和外键的方法 1列级实现方式 create table tName ( [id] int primary key )

create table tName ( [id] int primary key ,[name] char(8) references users(uName) not null ) 2表级实现方式 primary key(colName) foreign key(colName) references otherTName(colName) 3约束实现方式 在完成表创建以后,用alter方式增加主键和外键约束 alter table tName add constraint PK_tName_colName primary key(colName) alter table tName add constraint FK_t1Name_t2Name_colName foreign key(colName) regerences t2Name(colName) 推存第三种方式,这让设计和实现思路更清晰,更具有软件工程气质。

—知识块— 分类 实体完整性 存在,唯一 关系集合中,相同的元素没有任何意义。 参照完整性 级联与否(更新) 用表操作来解释外键【建表过程和顺序,数据初始化过程和顺序,删除和更改数据的限制】 学生(学号,姓名,性别,省份),省份(编号,省名,描述)

实现参照完整性要考虑的几个问题。
外码能否接受空值问题
在被参照关系中删除元组的问题:级联/受限
在参照关系中插入元组时的问题:
修改关系中主码的问题:允许/不允许
用户自定义完整性(包括域完整性) ([姓名] like ‘[^ ]%’ and len(ltrim(rtrim([姓名]))) > 1 and ((not([姓名] like ‘% %’)))) ([性别] = ‘女’ or [性别] = ‘男’) ([学号] like ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’) ([考试成绩]>=0 and [考试成绩]<=100) ([层次] = ‘本’ and [学制] = 4 or [层次] = ‘专’ and ([学制] = 2 or [学制] = 3) or [层次] = ‘硕’ and [学制] = 3 or [层次] = ‘博’ and [学制] = 2) [专业代码] >= 1001 and [专业代码] <= 9999 and [专业代码] % 1000 > 0 [专业性质] = ‘成人’ or ([专业性质] = ‘夜大’ or ([专业性质] = ‘高职’ or [专业性质] = ‘普通’))

数据库完整性实现方式 使用约束实现完慗性 使用规则实现完整性,一定要绑定规则 使用默认值实现完整性 使用触发器实现高级完整性 使用断言实现高级完整性 完整性控制应具有的功能: 定义功能 检查功能 违约提示

完整性概念

实体完整性
参照完整性
域完整性
用户定义完整性【业务要求的完整性】
完整性约束分类与实现方式

主键
外键
非空
唯一【约束或是索引】
表达式检查
默认值或默认对象绑定
规则与规则绑定 —知识块— 规则与绑定规则 --创建 creae rule 专利号编号规则 as @zlNumber like ‘[ZL][1-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]’ --查看 sp_helptext 专利号编号规则 --绑字 sp_bindrule 专利号编号规则,‘专利表.专利号’ --松绑 sp_unbindrule ‘专利表.专利号’ --删除 drop rule 专利号编号规则
默认值 --创建 create default birthday_party as ‘1921-7-1’ create default birthday_national as ‘1949-10-1’ create default myToday as getdate() --查看 sp_helptext myToday --绑定 sp_bindefault myToday,‘成绩.入库日期’ --松绑 sp_unbindefault ‘成绩.入库日期’ --删除 drop default myToday

复合键的实现方式
企业管理器和代码的实现方式
库表对象与完整性之间的附着和对应关系

索引

—知识块— 索引:对库表中的一个或是多个字段的值进行排序而创建的一种分散存储结构。 分类: 聚集与非聚集; 主键,唯一,普通 索引目的: 加速数据检索 加速连接,排序和分组操作 查询优化器的工作基础 强制实行唯一性(唯一约束) 关于填充因子 一般根据经验值来设置。 1-100的比例值,追求最优的IO操作效率。 操作类型和频率:常读少写80-100,半读半写70-80,少读多写50-70

SQLserver2000的全文索引 普通索引在数据库里,全文索引在windows系统里以microsoft search服务为基础 前者可以有多个,后者只有一个 前者自动维护,后者要调度维护 前者不能分组,后者可以把多个全文索引组织为一个全文目录,要先建目录,再创索引。 使用contains和freetext谓词实现全文索引sql操作。

概念

聚集索引
非聚集索引
分类方式与分类结果

主键索引
唯一索引
普通索引
多列组合索引
唯一索引与唯一约束的讨论

创建索引的注意事项与取舍权衡

第08部分:存储过程、触发器与用户自定义函数

—知识块— 存储过程 定义 头与体:体内编程实现 入口参数与出口参数:个数,类型,顺序,方向 默认值与空默认值:空,指定常量,模糊匹配 返回状态(值):?如何定义和使用说明

调用 格式 给入口值,取出口值 适当使用返回值

存储过程概念

—存储过程— 类型: 系统存储过程;用户定义存储过程;临时存储过程;扩展存储过程 特点: 接收输入参数并以输出参数的形式为调用过程或批处理返回多个值; 包含执行数据库操作的编程语句,包括调用其他过程; 为调用过程或批处理返回一个状态值,以表示成功或失败(及失败原因) 优点: 模块化编程 快速执行 减少网络通信量 提供安全机制 保证操作一致性

—触发器— 理解deleted表和inserted表

存储过程创建与调用

存储过程特点

使用存储过程的注意事项

输入参数
输出参数
返回值
存储过程不能完成的动作有哪些?
触发器概念

触发器创建与调用

触发器特点

使用触发器的注意事项

用户自定义函数概念

—函数— 内置函数/常用函数 自定义函数 标量函数 内嵌表值函数 多语句表值函数

用户自定义函数分类

用户自定义函数创建与调用

使用用户自定义函数的注意事项

第09部分:并发控制与事务处理

—数据库管理— 事务处理 事务的五种状态: 活动,部分提交,失败,中止,提交 Active,Partially committed,Failed,Aborted,Committed 注意要画出状态转换图说明。

事务的特性 原子性:一做全做,不做全不做 一致性:数据库整体前后是一致的 隔离性:不受其它事务的影响 持久性:成功提交后会保持结果

事务的并发与可串行化 每个事务都是一个数据库操作序列。 多个事务并发执行,肯定存在事务调度的问题。(特别是有共用资源的情况下)时间上的交叉,资源上的交叉。 多个事务的并发执行可以产生多个结果,而不同的调度可能会产生不同的结果。 串行的事务调度肯定是一致的、正确的。 正确的原因:事务仍然保持了隔离性。 随机的事务调度可能会带来并发问题:丢失修改、不可重复读、读”脏“数据等数据不一致性问题,从而影响并发调度的正确性。 出错的原因:破坏了事务的隔离性。 判断标准:多个事务并发执行是正确的,当且仅当其结果与按某一次串行执行它们时的结果相同。 概念理解:并发事务正确执行的调度为可串行化调度。这是我们追求的目标。

冲突:只有当两个操作的对象是同一数据项且都是读操作,或者这两个操作的操作对象是不同数据项时,两个操作是不冲突的。 1什么时候是冲突? 2什么时候可串行化?什么时候时候不可串行化?

事务模式 自动提交事务模式,显式事务模式,隐性事务模式

事务处理模型 ISO模型:暗头明尾,有明确的结束标记commit/rollback T-SQL模型:从begin tran开始,最后肯定是commite/rollback 正常结束commit 异常结束rollback

并发控制 什么是锁? 加锁意味着什么?不能更新,不能读取? 排他锁,写锁。更像是独占资源,一旦加上,其它事务就不能锁定,不能读写。 共享锁,读锁。更像是共享资源,一旦加上,其它事务仍然可读,但不能加X后再写。 理解:A读一定要先加上共享锁,A写一定要先加上排它锁。A可写,一定可读;但A可写时,其它不可读写;A可读时,其它可读不可写。 不封锁:只读,不加锁,不能防止”不可重复读“和”读脏“现象 一级封锁: 要求写之前,一定要先加X锁。但对读没有要求加锁 排它,本来排它就是为了让修改不受干扰,所以可以防止”丢失修改“现象。但无法防止”读脏“现象。 A可以成功的改很多次,B不用锁,直接就可以访问,在间隔区间可以读。就很可能读脏。万一A下一次又把数据改回来了呢?

二级封锁: 要求写之前,先加X锁,读之前,一定要先加S锁,读完就释放S锁。
在一级的基础上,再加共享,A加对R加了X锁之后,B对R想加S锁,就必须等待。可以防止”丢失修改“和”读脏“现象。
保证了在写和读的时候都不受干扰。
但不能解决”不可复读“的问题。因为再一次读时,数据可能已经被改变了。

	三级封锁:	要求写之前,先加X锁,读之前,一定要先加S锁,事务完时才释放S锁。
				在整个事务期间读写都不受干扰。
				
	显然,
		锁越多,并发可能性就越小,并发性能就越低
		锁越少,并发出错性就越大,并发越不可行			
		锁是为了独占。但独占肯定会影响共享和并发。而我们正在追求并发。

活锁和死锁 什么是死锁? 解决措施: 防止死锁:一次性封锁法,顺序封锁法,优先级法 监测死锁:超时法,等待图法 解除死锁:最小代价法。以防为主,死一个比两个都死要优一些。 两阶段锁 生长阶段和收缩阶段,即加锁阶段和解锁阶段 可以让并发正确,但更易引发死锁 多粒度锁 粒度越大,其它T能锁的单元就越少,锁减少,并发度越低,系统开销越小 粒度越小,其它T能锁的单元就越多,锁增多,并发度越高,系统开销越大 目标:尽可能高的并发度,同时尽可能降低系统开销 T越多,越易引发死锁;粒度越大,越易引发死锁;因此要找一个平衡最优点。 意向锁:IS->S,IX->X,SIX->IX,有点像先定酒店,再定包间,但力度不一样。前者电话预定,后者交定金确定。 理解:欲对子节点加锁,先对其祖节点加意向锁。自上而下加锁,正下而上解锁。 意向有告知系统,事先做好准备的意味。 你可能要取别人女儿,事先告诉父母大人,要见见岳父母大人。 从管理角度看,提高了锁的相容度,提高了系统的并发性,同时也可以减少系统开销。

并发与可串行化概念

事务

概念

模式、状态、特点

实现方式

概念与分类

加锁协议

活锁与死锁

加锁力度与粒度讨论

第10部分:数据库技术综合应用

先写日志后做操作。 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。

数据库镜像技术? 双磁盘镜像技术

—知识块— 数据库安全性的控制策略 用户标识和身份证认 存取控制策略 自主访问控制DAC 强制访问控制MAC 基于角色存取控制RBAC 视图机制(限定数据和访问操作) 存储过程机制(限定具体动作) 数据加密和审计(安全不光是技术问题)

—知识块— 角色与权限 角色是用来简化将很多权限分配给很多用户这一复杂任务的管理的。 系统可以自带一些预先定义好了的角色 固定服务器角色 最高权:sysadmin即系统管理员 固定数据库角色 最高权:db_owner即所有者dbo 用户也可以自定义一些角色 一般情况下,角色根据工作组或是任务来设置(如管理员,经理,普通员工,访客) create role grant select,update,insert on objectName to roleName revoke… on … from …

权限:对数据库执行某种操作的许可 系统[create/alter/drop/backup/restore]管理权限create database,create table ,backup database… 对象[table/view/proc/function]访问权限select,insert,update,delete,exec 可以对用户直接分配和管理权限 可以对角色分配和管理权限 站在用户角度看,角色就是一个已经给了具体命名的权限集合。取得该角色,就取得该角色赋予的权限。 角色的优势: 业务理解上更直接 多权限多用户时更高效 调整时更灵活方便 统一系统化管理

普通循环与游标应用

系统函数的应用

帐号权限管理

数据转换与分布式查询应用

数据备份与恢复

—知识块— ---备份与恢复— 备众与恢复模型 复制与分发模型 数据导入导出

数据复制与分发

猜你喜欢

转载自blog.csdn.net/matrixbbs/article/details/90369701