《SQL Server 从入门到精通》学习笔记

《SQL Server 从入门到精通》

第1章 数据库基础

1.2 数据库的体系结构

1.2.1 数据库三级模式结构

  1. 模式
    模式也称逻辑模式或概念模式,它是数据库中全体数据的逻辑结构和特征的描述,是全部用户的公共数据视图。一个数据库只有一个模式,模式处于三级结构的中间层。
    定义模式时不只要定义数据的逻辑结构,并且要定义数据之间的联系,定义与数据有关的安全性完整性要求
  2. 外模式
    外模式也称用户模式,它是数据库用户(包括应用程序员和最终用户)可以看见和使用的局部数据的逻辑结构和特征的描述是数据库用户的数据视图是与某一应用有关的数据的逻辑表示。外模式是模式的子集。一个数据库能够有多个外模式。
    外模式是保证数据安全性的一个有力措施。
  3. 内模式
    内模式也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式

1.2.2 三级模式之间的映射

为了可以在内部实现数据库的3个抽象层次的联系和转换,数据库管理系统在三级模式之间提供了两层映射。html

  1. 外模式/模式映射
    对应于同一个模式能够有任意多个外模式。对于每个外模式,数据库系统都有一个外模式/模式映射。当模式改变时,由数据库管理员对各个外模式/模式映射做相应的改变,可使外模式保持不变。依据数据外模式编写的应用程序就不用修改,保证数据与程序的逻辑独立性
  2. 模式/内模式映射
    模式/内模式映射惟一,定义了数据库的全局逻辑结构与存储结构之间对应关系。当数据库的存储结构改变时,由数据库管理员对模式/内模式映射做相应改变,可使模式保持不变,应用程序相应地也不作变更。保证数据与程序的物理独立性

1.3 数据模型

数据模型是一种对客观事物抽象化的表现形式。它对客观事物加以抽象,经过计算机来处理现实世界中的具体事物。它客观地反映了现实世界,易于理解,与人们对外部事物描述的认识相一致。程序员

1.3.1 数据模型的概念

数据模型由数据结构、数据操做、完整性约束组成。
数据结构:是对系统静态特征的描述。描述对象包括数据的类型、内容、行政和数据之间的相互关系。
数据操做:是对系统动态特征的描述,是对数据库中各类对象实例的操做。
完整性约束:是完整性规则的集合。他定义了给定数据模型中数据及其联系所具备的制约和依存规则。sql

1.3.2 常见的数据模型

  1. 层次模型:用树形结构表示实体类型及实体间联系的数据模型成为层次模型。
  • 每棵树有且仅有一个无双亲节点,称为根。
  • 树中除根外全部节点有且仅有一个双亲。
  1. 网状模型:用有向图结构表示实体类型及实体间联系的数据模型成为网状模型。用网状模型编写应用程序及其复杂,数据的独立性较差。
  2. 关系模型:以二维表来描述数据。在关系模型中,每一个表有多个字段列和记录行,每一个字段列有固定的属性(数字、字符、日期等)。关系模型数据结构简单、清晰、具备很高的数据独立性,所以是目前主流的数据库数据模型。
  • 关系:二维表
  • 元组:二维表一行,表中的记录
  • 属性:二维表一列,用类型和值表示
  • :每一个属性取值的变化范围,如性别的域为{男,女}

关系模型中的数据约束:数据库

  • 实体完整性约束:约束关系的主键属性值不能为空
  • 参照完整性约束:关系之间的基本约束
  • 用户定义的完整性约束:反应具体应用中数据的语义要求

1.3.3 关系数据库的规范化

第一范式(1NF)、2NF、3NF、鲍依斯-科得范式(BCNF)、4NF、5NF。其中,NF是Normal Form的缩写。通常状况下,只要把数据规范到第三范式标准便可知足须要。安全

  • 1NF:在一个关系中,消除重复字段,且各字段都是最小的逻辑存储单位。
  • 2NF:1NF基础上,消去非主属性对键的部分函数依赖
  • 3NF:2NF基础上,消去非主属性对键的传递函数依赖
  • BCNF:3NF基础上,消去主属性对键的传递函数依赖
  • 4NF:BCNF基础上,消去表中的多值依赖
    详细说明

1.3.4 关系数据库的设计原则

  1. 数据库内文件的数据组织应得到最大限度的共享、最小的冗余度,消除数据及数据依赖关系中的冗余部分,使依赖于同一个数据模型的数据达到有效的分离。
  2. 保证输入、修改数据时数据的一致性与正确性。
  3. 保证数据与使用数据的应用程序之间得到高度独立性。

1.3.5 实体与关系

实体是指客观存在并可相互区别的事物,也能够是抽象的概念或关系。实体之间有三种关系。服务器

  1. 一对一关系:表A中的一条记录确实在表B中有且只有一条相匹配的记录。在一对一关系中,大部分相关信息都在一个表中。
    学生与学生的身份证号
  2. 一对多关系:表A中的行能够在表B中有许多匹配行,可是表B中的行只能在表A中有一个匹配行。
    一个学生只属于一个班,一个班有多名学生
  3. 多对多关系:关系中的每一个表的行在相关表中具备多个匹配行。在数据库中,多对多关系的创建是依靠第3个表(称做链接表)实现的,链接表包含相关的两个表的主键列,而后从两个相关表的主键列分别建立与链接表中的匹配列的关系。
    一个学生能够选择多门课,一门课也有多名学生

详细说明数据结构

1.4 常见关系数据库

Oracle在并行处理、实时性、数据处理速度方面都有较好的性能。数据库设计

第4章 建立与管理数据库

4.1 认识数据库

4.1.1 数据库基本概念

关系数据库
关系数据库是支持关系模型的数据库。关系模型由关系数据结构、关系操做集合和完整性约束3部分组成。函数

  1. 关系数据结构:在啊关系模型中数据结构单一,现实世界的实体以及实体间的联系均用关系来表示,实际上关系模型中数据结构就是一张二维表
  2. 关系操做集合:关系操做分为关系代数、关系演算、具备关系代数和关系演算双重特色的语言(SQL语言)
  3. 完整性约束

4.1.2 数据库经常使用对象

  • :表是包含数据库中全部数据的数据库对象,由行和列组成,用于组织和存储数据。
  • 字段:表中每列成为一个字段,字段具备本身的属性,如字段类型、字段大小等。其中,字段类型是字段最重要的属性,它决定了字段可以存储哪一种数据。
  • 索引:索引是一个单独的、无力的数据库结构。它是依赖于表创建的,在数据库中索引是数据库程序无需对整个表进行扫描,就能够在其中找到所需的数据。
  • 视图:视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方式。表中包括几个被定义的数据列与数据行,其结构和数据创建在对表的查询基础上。
  • 存储过程:存储过程是一组为了完成特定功能的SQL语句集合(包含查询、插入、删除和更新等操做),经编之后以名称的形式储存在SQL Server服务器端的数据库中,由用户经过制定存储过程更的名字来执行。当这个存储过程被调用执行时,这些操做也会被同时执行。

4.2 SQL Server的命名规范

4.2.1 标识符

  1. 标识符格式
  • 标识符的首字符必须是Unicode所定义字符,'_' '@' '#'。
    '@'开始的标识符表示局部变量或参数
    '#'开始的标识符表示临时表或过程
    '##'开始的标识符表示全局临时对象
  • 标识符后的后续字符
    Unicode 2.0 标准中所定义的字母。
    来自拉丁字母或其余国家/地区脚本的十进制数字。
    '@' '$' '#' '_'
  • 标识符不容许是Transact-SQL的保留字
    微软官方文档
  • 不容许嵌入空格或其余特殊字符
  1. 标识符分类
  • 常规标识符:符合标识符的格式规则
  • 分隔标识符:包含在“”[]内的标识符。该标识符能够不符合标识符的格式规则。

4.2.2 对象命名规则

在一个数据库中建立了一个数据库对象后,数据库对象的完整名称应该由服务器名、数据库名、拥有者名和对象名4部分组成
[[[server.][database].][owner_name].]object_name
服务器、数据库和全部者的名称即所谓的对象名称限定符。当引用一个对象时,不须要指定服务器、数据库和全部者,能够利用句号标出他们的位置,从而省略限定符。
指定了全部4哥部分的对象名称被称为彻底合法名称。post

4.3.3 使用管理器删除数据库

删除数据库时必须知足如下条件

  • 若是数据库设计日志传输操做,在删除数据库以前必须取消日志传送操做
  • 若要删除为事务复制发布的数据库,或删除为合并复制发布或订阅的数据库,必须首先从数据库中删除复制。若是数据库已损坏,不能删除复制,能够先将数据库设置为脱机状态,而后再删除数据库。
  • 若是数据库中存在数据库快照,必须首先删除数据库快照。
    系统数据库(msdb、model、master、tempdb)没法删除,删除数据库后应当即备份master数据库,由于删除数据库将更新master数据库中的信息。

第5章 操做数据表与视图

5.1 数据表基础知识

5.1.1 基本数据类型

基本数据类型详情
char、varchar、nchar、nvarchar的区别:

5.1.2 用户定义数据类型

  1. 使用T-SQL语句建立用户自定义数据类型

建立用户自定义数据类型
语法:

sp_addtype [ @typename = ] type,   
    [ @phystype = ] system_data_type   
    [ , [ @nulltype = ] 'null_type' ] ;

实例:

USE test
EXEC sp_addtype postcode,'char(8)','not null'

删除用户自定义数据类型
语法:

sp_droptype [ @typename = ] 'type'

实例:

USE test
EXEC sp_droptype postcode

5.1.3 数据表的数据完整性

Microsost SQL Server 2008提供多种强制数据完整性的机制。

  1. NULL or NOT NULL
    表的每一列都有一组属性,如名称、数据类型、数据长度和为空性等,列的全部属性即构成列的定义。列能够定义为容许或不容许空值。
  • NULL:默认状况下,列容许空值,即容许用户在增长数据是省略该列的值。
  • NOT NULL:不容许在没有指定列默认值的状况下该列的值。
  1. 默认值
    若是在插入行时没有指定列的值,那么默认值将指定列中所使用的值。默认值可使任何取值为常量的对象,如内置函数和数学表达式等。
  • 在CREATE TABLE中使用DEFAULT关键字建立默认定义,将常量表达式指派为列的默认值,这是标准方法。
    - 使用CREATE DEFAULT语句建立默认对象,而后使用sp_bindefault系统存储过程将它绑定到列上,这个一个向前兼容的功能。[此功能将在Microsoft SQL Server的将来版本中删除]
  1. IDENTITY(特征标识属性)
    数据表中若是某列被指派IDENTITY,系统将自动为表中插入的新行生成连续递增的编号。由于标识值一般惟一,因此标识列一般定义为主键。
    IDENTITY属性适用于INT、SALLINT、TINYINT、DECIMAL(P,0)、UMERIC(P,0)数据类型的列。
  2. 约束
    约束是用来定义Microsoft SQL Server 2008自动强制数据库完整性的方式。使用约束优先于使用触发器、规则和默认值。SQL Server 2008中共有如下5种约束。
  • NOT NULL:使用户必须在表的指定列中输入一个值。每一个表中能够有多个非空约束。
  • Check(检查):用来指定一个布尔操做,限制输入到表中的值。
  • Unique(惟一性):创建一列或多列的组合以惟一标识表中的每一行。逐渐能够保证明体完整性,一个表只能有一个主键,同时逐渐中的列不能接受空值。
  • Foreign key(外键):用于创建和增强两个表数据之间的连接的一列或多列。当一个表中做为主键的一列被添加到另外一个表中时,连接就创建了,主要目的是控制存储在外键表中的数据。

5.3 建立、删除和修改约束

约束是SQL Server提供的自动强制数据完整性的一种方式,它是经过定义列的取值规则来维护数据的完整性,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询分析器也使用约束定义生成高性能的查询执行计划。

5.3.3 UNIQUE约束

当在表中已建立主键,但又要保证其余数据列的值惟一时,可使用UNIQUE约束。
使用UNIQUE约束能够确保在非主键列中部输入重复的值。UNIQUE约束和PRIMARY KEY约束都具备强制惟一性,但想要强制一列或多列组合(不是PRIMARY KEY)的惟一性时,应使用UNIQUE约束而不是PRIMARY KEY约束。
能够对一个表定义多个UNIQUE约束,但只能定义一个PRIMARY KEY约束。并且UNIQUE约束容许NULL。当与参与UNIQUE约束的任何值一块儿使用时,每列只容许一个NULL。FOREIGN KEY约束能够引用UNIQUE约束。
操做:

表->设计->索引/键->增长
列:选择列
类型:惟一键

5.3.4 CHECK约束

CHECK约束经过限制输入到列中的值来强制域的完整性。此类约束相似于FOREIGN KEy约束,能够控制放入到列中的值。

  • FOREIGN KEY约束:从其余表得到有效值列表
  • CHECK约束:经过不急于其余列中的数据的逻辑表达式肯定有效值。
    建立CHECK约束能够将某列数据的取值范围限制在指定的范围内,从而防止输入的数据超出指定的范围。
    操做
表->设计->CHECK约束->增长
表达式:old>18 and old<100

5.3.5 默认约束

默认约束使用户可以定义一个值,每当用户没有在某一列中输入值时,则将所定义的值提供给这一列。若是用户对此列没有特定的要求,可使用默认约束来为此列输入默认值。
即便列为NOT NULL,设置默认约束后,可不进行输入,会使用默认值。
操做

表->设计->选中列->列属性
默认值或绑定:https://image.baidu.com/s/101.jpg

5.3.6 FK(外键)约束

FK适用于创建两个表数据之间链接的一列或多列。经过将保存表中主键值的一列或多列增长到另外一个表中,可建立两个表之间的连接,这个列就成为第二个表的外键。
操做

表->设计->关系->增长
表和列规范:选择主键表的列和外键表的列
INSERT和UPDATE规范
删除规则
不执行任何操做:报错不执行
级联:删除主键表列的同时将关联的外键表中的列同时删除
更新规则
级联:更新主键表列的同时将关联的外键表中的列同时更新

SQL的主键和外键的做用:
外键取值规则:空值或参照的主键值。

  • 插入非空值时,若是主键表中没有这个值,则不能插入。
  • 更新时,不能改成主键表中没有的值。
  • 删除主键表记录时,你能够在建外键时选定外键记录一块儿级联删除仍是拒绝删除。
  • 更新主键记录时,一样有级联更新和拒绝执行的选择。

5.4 关系的建立与维护

5.4.1 一对一关系

在一对一关系中,大部分相关信息都在一个表中。特色

  • 分割一个含有许多列的表
  • 出于安全考虑而隔离表的某一部分
  • 存储能够很容易删除的临时数据,只需删除表便可删除这些数据
  • 存储值应用于主表子集的信息。
    若是连个相关列都是主键或具备惟一约束关系,建立的就是一对一关系。

5.4.2 一对多关系

一对多关系是最多见的关系类型,是指表A中的行能够在表B中有许多匹配行,可是表B中的行只能在表A中有一个匹配行
若是在相关列中只有一列是主键或具备惟一约束,则建立的是一对多关系。

5.4.3 多对多关系

多对多关系是指关系中每一个表的行在相关表中具备多个匹配行。在数据库中,多对多关系的创建是依靠第3哥表即链接表实现的,链接表包含相关的两个表的主键列,而后从两个相关表的主键列分别建立与连接表中匹配列的关系。

5.5 视图概述

视图是一种经常使用的数据库对象,它将查询的结果以虚拟表的形式存储在数据中。视图并不在数据库中以存储数据集的形式存在。视图的结构和内容是创建在对表的查询基础之上的,和表同样包括行和列,这些行列数据都来源于其所引用的表,而且是在引用视图过程当中动态生成的。
视图中的内容是有查询定义来的,而且视图和查询都是经过SQL语句定义的,他们有着许多相同和不一样之处。

× 视图 查询
存储 视图存储为数据库设计的一部分, 查询不存储
排序 只有当视图包括TOP子句才能排序视图 能够排序任何查询结果
加密 能够加密视图 不能加密查询

能够禁止全部用户访问数据库的基表,而要求用户只能经过视图操做数据。这种方法能够保护用户和应用程序不受某些数据库修改的影响

5.6 使用企业管理器管理视图

标准视图:保存在数据库中的SELECT查询语句,即一般意义上理解的视图。 索引视图:建立有索引的视图成为索引视图。他通过计算并存储有本身的数据,能够提升某些类型查询的性能,尤为适用于聚合许多行的查询,但不太适合于常常更新的基本数据集。 分区视图:是在一台或多台服务器间水平联结一组表中的分区数据,以使数据看上去来源于一个表。

相关文章
相关标签/搜索