SQL Server数据库理论篇
一. 数据库的关系分类
1.1.0 关系型数据库和非关系数据库区别?
结论
:两种数据库的本质在于存储数据的形式不同
1.关系型数据库概念
关系型数据库最大的特征就是表,我们将对象的属性映射为表的一个个列名,将数据按照对应关系逐行填充。(如下图)我们对数据进行CRUD的时候,都是基于表中的一行行数据进行操作的。
假设,我们想要插入一条用户信息的数据(结合上图)的时候,除了添加用户名之外,还得补充上用户性别、出生日期等其他数据才行,除非是表设计的时候对于某些字段做了允许为空的设置,否则我们必须保证表中存储数据的完整性。我们持久化数据的时候就需要保证数据的完整性。好处:数据的完整性,才能·保证了数据的安全性和稳定性
2.非关系型数据库概念
非关系数据库的存储方式则是更为熟悉和常见的结构:
键值对
,我们通过key : value的形式来保存对应的数据;就拿上图的的用户表作为例子,我们可以用PeopleId : 202226
,PeopleName:刘德华
,PeopleGendeer:男
…来表示一条数据,这里面并没有用到表结构,但是二者实际的存储数据并没有任何变化。这样的话,就带来一种好处,我可以根据业务需要很方便地修改存储的键,比如要新增多一个用户银行卡字段,只需要多加一个key值即可。不再需要像传统的关系型数据库一样,调整表结构了。非关系型数据库的好处显而易见,拓展性高,约束性小,操作速度快;但同时,劣势也在此。对于需要高度安全的数据,非关系型数据库就无法保证了
1.1.1 常见数据库的分类?
1.关系型数据库
MySQL
:免费、开源、适用中小型和个人使用;后面MySQL被sun公司收购,sun公司又被Oracle收购,最新的版本应该不是免费的了。
Oracle
:大多数大型商业公司的选择,Oracle支持高并发,大访问量,支持事务,数据库性能好,稳定性高,但是收费.
2.非关系型数据库
MongoDB
:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案.
Redis
:比较典型的Nosql
数据库,其优秀的缓存机制更是开发人员常常使用到的功能之一.
1.1.2 总结
对于
业务变动较大和频繁
,经常需要修改字段
,对安全性要求不高
的数据而言,使用非关系型数据库是一个很好的选择。反之,如果业务对于数据有着比较高的安全性要求
,那么现阶段使用关系型数据库会是更好的选择
二.数据库管理系统
2.1.1 DBMS的主要功能
- 数据定义语言(data definition language,DDL):定义数据库的结构、包括外模式、内模式及相互之间的映像,定义数据的完整性约束、保密限制等。
- 数据操纵语言(data manipulation language,DML):实现对数据库的操作,增、删、查、改
- 数据库运行控制能力(四方面):数据安全性控制、数据完整性控制、多用户下的高并发控制以及数据库的恢复
- 数据库的维护功能:包括数据初始数据的载入、转换、存储等
- 数据字典(data dictionary,DD)
2.2.1 DBMS的组成
- 数据描述语言(DDL)
- 数据操纵语言(DML)
- 数据库管理的例行程序
三.数据模型的三个层次
数据模型
是对客观事物及其联系的数据的描述。从事物的特征到计算机中的数据表示,对现实世界问题的抽象经历了三个不同层次。即:概念数据模型
、逻辑数据模型
、物理数据模型
3.1.0 概念数据模型
又称概念模型,是现实世界到概念世界的抽象。概念模型是整个数据模型的基础。著名的模型是实体—联系模型(简称:E-R图)
3.1.1 逻辑数据模型
又称数据模型,是概念世界的抽象描述到信息世界的转换。概念模型只有在转换成数据模型后才能在数据库中得以表示;常用数据模型有层次模型、网状模型、关系模型。这类模型具有严格的定义(数据结构、数据操作、数据完整性约束)
数据结构
:是指实体类型和实体间联系的表达和实现
数据操作
:是对数据库的检索和更新(包含插入、删除和修改)两类操作
数据完整性约束
:给出数据及其联系应具有的制约和依赖规则
3.1.2 物理数据模型
又称物理模型,是信息世界在机器世界的实现。
四.信息世界的基本概念和E-R图
4.1.0 数据库常用术语
术语 | 说明 |
---|---|
实体(entity) | 客观存在并可相互区别的事物(一个学生、一个部门、一门课) |
属性(attribute) | 实体具有的某一特征(学生的学号、姓名、性别…) |
码(key) | 唯一标识实体的属性或属性集称为码,且不应有冗余属性(学号是学生实体的码) |
域(domain) | 属性的取值范围(例如学号长度为8位) |
实体集(entity set) | 同型实体的集合(全体学生就是一个实体集) |
实体型(entity type) | 具有相同属性的实体必然具有共同的特征和性质,用实体名和属性名集合表示同类实体() |
联系 | 具体看下文 |
4.1.1实体联系的定义和辨别方法
相信很多向我一样刚入门数据库的小伙伴,在这个地方肯定一开始是搞得稀里糊涂的,那么今天就让小编来彻底给你梳理下下。
一对一联系(1:1)
专业表述
:如果对于实体集A中的每一个实体,在实体集B中最多只有一个实体与之联系,反之亦然;则称实体集A和实体集B具有一对一联系。例如:①一所大学只有一个书记,而一个书记只能在一所学校任职。学校和书记就是一对一的关系。
②一个人只有一个身份证号,一个身份证号只对应一个人。身份证号和这个人就是一对一关系。
一对多联系(1:n)
专业表述
:如果实体集A中的每一个实体,在实体集B中有N个实体(N>=0)与之联系,反之,实体集B中的每一个实体,在实体集A中最多只有一个实体与之联系。则称A-B他们之间存在一对多的联系。例如:①一个企业聘用多名工人,而一个工人只能在一个企业中工作。则企业和工人之间存在一对多关系
②一间教室可以给多个正在上英语课学生使用,而一个正在上英语课的学生只能在一间教室上课。
多对多联系(n:m)
专业表述
:如果实体集A中的每一个实体,在实体集B中有N个实体(N>=0)与之联系,反之,实体集B中的每一个实体,在实体集A中有M个实体(M>=0)与之联系。则称A-B他们之间存在多对多的联系。例如:①一个企业聘用多名工程师,而一个工程师可以在多个企业中兼职。则企业和工程师之间存在多对多关系
②一本书可以被多个学生借阅,而一个学生可以借阅多本书。书和学生存在多对多的关系
4.1.2 概念模型的E-R模型表示方法
实体型(集)
:用矩形表示,矩形框内写明实体集名。
属性
:用椭圆表示,并且用无向边将其与相应的实体集体连接起来。
联系
:用菱形表示,菱形内写明联系名,并且用无向边将其与相应的实体集体连接起来,并且在无向边旁边标上联系的类型(1:1、1:n、n:m)
题1:
假设每个学生选修若干门课程,且每个学生每选一门课只有一个成绩,每个教师只担任一门课的教学,一门课由若干教师任教。“学生”有属性:学号、姓名、地址、年龄、性别。“教师”有属性:职工号、教师姓名、职称,“课程”有属性:课程号、课程名。
①试画出E-R图,并注明属性和联系类型。(5分)
②将E-R图转换成关系模型 ,并注明主码和外码 (5分)
(1)
(2)
学生(学号,姓名,地址,年龄,性别)
课程(课程号,课程名)
教师(职工号,教师姓名,职称,课程)
选课(学号,课程号,成绩)
题2
设有商店和顾客两个实体,“商店”有属性:商店编号、商店名、地址、电话,“顾客”有属性:顾客编号、姓名、地址、年龄、性别。假设一个商店有多个顾客购物,一个顾客可以到多个商店购物,顾客每次去商店购物有一个消费金额和日期,而且规定每个顾客在每个商店里每天最多消费一次。
①试画出ER图,并注明属性和联系类型。
(1)
题3:
某研究所有多名科研人员,每一个科研人员只属于一个研究所,研究所有多个科研项目,每个科研项目有多名科研人员参加,每个科研人员可以参加多个科研项目。科研人员参加项目要统计工作量。“研究所”有属性:编号,名称、地址,“科研人员”有属性:职工号、姓名、性别、年龄,职称。“科研项目”有属性:项目号、项目名、经费。
①试画出ER图,并注明属性和联系类型.
(1)
4.1.3 数据库的三个模式
外模式、模式、内模式、
五.关系数据概述
5.1.0 关系模型的三部分
数据结构
:关系模型的数据结构非常单一,只有关系、实体及实体之间的联系都用关系表示。即关系模型中数据的逻辑结构是一张二维表。
关系操作集合
:关系操作是高度非过程化的、用户不必指出存取路径。
关系的完整性约束条件集合
(实体完整性、参照完整性、用户定义的完整性)
实体完整性:
若属性A是基本关系R的主属性,则属性A不能取空值,即关系中的主码不允许为空值。参照完整性
:通俗地说就是外键约束
5.1.1 码、主码、外部码、主属性
码
:码是关系中的属性或属性组(有的码是由几个属性共同决定的),若它的值唯一地标识了一个元组,则称该属性或属性组为候选码(candidate key)。主码
:若一个关系有多个候选码,则选定其中一个为主码(primary key)- 包含在任意一个候选码中的属性都称为主属性
- 某个关系中的一个属性(可以是一个普通的属性,也可以是主码),这个属性在另一个关系中是主码。则称为外部码(foreign key)
关系的性质
:
- 列是同质的,即每一列中的分量是同类型的数据,来自同一个域。
- 不同的列可以出自同一个域,每一列称为属性,需要给予不同的名称。
- 列的次序无所谓,即列的次序可以任意交换。
- 关系中的各个元组是不同的,即不允许有重复的元组。
主属性* - 某个关系中的一个属性(可以是一个普通的属性,也可以是主码),这个属性在另一个关系中是主码。则称为外部码(foreign key)
关系的性质
:
- 列是同质的,即每一列中的分量是同类型的数据,来自同一个域。
- 不同的列可以出自同一个域,每一列称为属性,需要给予不同的名称。
- 列的次序无所谓,即列的次序可以任意交换。
- 关系中的各个元组是不同的,即不允许有重复的元组。