大家好,又见面了,我是你们的朋友全栈君。
穷则独善其身,达则兼济天下
一. 什么是数据库
狭义:存储数据的仓库
广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库
定义:是长期存储在计算机内的、有组织的、可共享的数据集合
数据库是由表、关系、操作组成
二. 为什么需要数据库
几乎所有的应用软件的后台都需要数据库
数据存储数据占用空间小,容易持久保存
代码语言:javascript复制 数据库的内容是存储在硬盘上,掉电之后任然存在
存储比较安全
代码语言:javascript复制 软件是加密的,只能通过DBMS打开
容易维护和升级
代码语言:javascript复制 使用SQL语句方便操作数据
数据库移植比较容易
简化对数据的操作
数据库是第四代语言,是一些命令
为将来学习Oracle做准备
B/S架构里面包含数据库
三. 预备知识
1. 学习数据库必须要学习数据库原理吗?
是滴,数据库原理是理论知识,数据库软件是对数据库的实现
2. 学习SQL server必须先学一门编程语言吗?
不需要,但是懂一门编程语言有助于学习SQL server中的TL-SQL TL-SQL带有流程控制的SQL命令
3. 数据结构和数据库的区别?
数据库:是在应用软件级别研究数据的存储和操作(外存级别) 数据结构:是在系统软件级别研究数据的存储和操作(内存级别)
4. 什么是连接
5. 有了编程语言为什么还需要数据库
保存数据的容器:数组、集合、文件
代码语言:javascript复制其中数组、集合是临时性存储
文件是持久化存储
对内存数据操作是编程语言的强项,但对硬盘数据操作却是编程语言的弱项
对硬盘数据操作却是数据库强项,是数据库研究核心
6. 建议初学者从三个方面学习数据库
数据库是如何存储数据的
代码语言:javascript复制 字段 记录 表 约束 (主键、外键、唯一键、非空、check、default、触发器)
什么是约束
代码语言:javascript复制 定义:对一个表中的属性操作的限制叫约束
分类:
主键约束:不允许重复元素,避免了数据冗余
主键定义:可以唯一标识一个事物的一个字段或多个字段的组合
主键表:含有主键字段的表
注:主键通常是整数,不建议使用字符串(除非主键用于集群式(个机器)服务可考虑)
主键的值通常都不允许修改,除非本记录被删除
主键不要定义成id,而要定义成表名id或表名_id
要用代理主键,不要用业务逻辑主键(用一个没有实际意义的编号当主键)
外键约束:通过外键约束从语法上,保证了本事物所关联的其他事物一定是存在的
事物和事物的关系是通过外键来体现的
外键定义:如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键
外键表:含有外键字段的表,外键字段来自的那一张表叫主键表
注:外键通常是来自另外表的主键而不是唯一键,因为唯一键可能是null
外键不一定来自另外的表,也可能来自本表的主键
先删除主键表还是外键表?
答:先删除外键表
如果先删除主键表,会报错,因为这会导致外键表中的数据引用失败
check约束:保证事物属性的取值在合法范围内
default约束:保证事物属性一定会有一个值
唯一(unique)约束:保证了事物属性的取值不允许重复,但允许其中有一列为空
注:SQL server只允许一个unique列为空
Oracle运行多个unique列为空
not null约束:要求用户必须为该属性赋一个值,否则语法出错
如果一个字段不写null也不写not null,则默认值是null,即允许为空
注:null和default区别
同:都允许用户不赋值
不同:null修饰的字段如果用户不赋值则默认是null
default修饰的字段如果用户不赋值则默认是default指定的那个值
表和约束的区别
代码语言:javascript复制 数据库是通过表来解决事物的存储问题
数据库是通过约束来解决事物取值有效性和合法性的问题
建表的过程就是指定事物属性和事物属性中各种约束的过程
什么是关系
代码语言:javascript复制 定义:表和表之间的联系
实现方式:通过设置不同形式的外键来体现表和表之间的不同关系
表和表之间的关系分类(假设有A表和B表):
一对一
既可以把表A的主键充当表B的外键
也可以把表B的主键充当表A的外键
多对一
在多的一方添加外键
多对多
多对多必须通过第三张表来表示关系
例子:
班级是一张表
老师是一种表
班级和老师关系是一张表
多对多关系图示
数据库存储数据的特点:
代码语言:javascript复制 将数据放到表中,表再放到库中
一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性
表具有一些特性,这些特性定义了数据在表中如何存储。类似于Java的类
表由列组成,我们也称为字段,所有的表都是由一个或多个列组成的,每一个列类型Java中的属性
表中数据是按行存储的,我们成为一个元组,每一行类似与Java中的对象
数据库是如何操作数据的
代码语言:javascript复制 insert delete update T-SQL 存储过程 函数 触发器
数据库是如何显示数据的
代码语言:javascript复制 select
7. 数据库软件
- 好处:
- 可将数据持久化到硬盘
- 可存储大量数据
- 方便检索
- 保证数据的一致性、完整性
- 安全,可共享
- 通过组合分析,可以产生新的数据
8. 常见的数据库产品
大型数据库:
代码语言:javascript复制 Oracle:甲骨文公司,产品不花钱,服务维护收费高
DB2:IBM,应用于海量数据
中型数据库
代码语言:javascript复制 SQL Server:微软公司(只能装在windows上)
小型数据库
代码语言:javascript复制 MySQL:甲骨文公司,开源免费,任何OS都可以
数据库公司发展
发展历程
9. 数据库的分类
1.关系型数据库:
- 数据库中的数据是以表格的形式存储的,表格是有行有列的形式。 关系型数据库常见的数据库:mysql oracle sqlserver db2 webserver…
2.非关系型数据库:(nosql数据库)完整的概念:not only sql
- 数据库中存储数据的格式不是表格,有些是以文档形式存储,有些以列形式存储,有些以键值对形式存储。 常用的非关系型数据库:redis mongodb hbase…
四. 数据库相关概念
1. 数据库的基本概念
D 数据(data):描述事物的符号记录(量化特征描述 非量化特征描述)
代码语言:javascript复制 例如:数字、文字、图形、音频、视频
数据分类:
结构化数据
代码语言:javascript复制 行数据,存储在数据库中,可以用二维表结构来逻辑表达实现的数据
非结构化数据
代码语言:javascript复制 不方便用数据库二维逻辑表来表现的数据
例如:
办公文档、文本、图片、图形、音频、视频
数据内容:
代码语言:javascript复制 型(type):数据表示形式
值(value):给出了复合给定的值
DB 数据库(database):存放数据的仓库,保存了一系列有组织的数据
代码语言:javascript复制 特点:具有统一的结构形式并存放于统一的存储介质内,可被各种应用所共享
是按数据所提供的数据模式存放
例如:关系数据库中:数据库的体现就是二维表
DBS 数据库系统:计算机系统引入数据库和DBMS之后的完整系统
代码语言:javascript复制 包括:
数据库
数据库管理系统
数据库管理人员
硬件平台
软件平台
DBMS 数据库管理系统(Database Management System):是一个系统软件,数据库是通过DBMS创建和操作的容器。我们平常说学数据库,就是学习这个数据库软件
SQL 结构化查询语言(Structure Query Language):专门用来与数据库通信的语言
DBAS 数据库应用系统(Database Application System):由数据库系统 应用软件 应用界面构成
数据流程图(DFD)
数据字典(DD)
2. 数据库技术与软件工程的关系
(1). 软件工程概念
定义
以工程化的思想来开发软件
代码语言:javascript复制 用工程、科学、数学的原则与方法来开发、维护计算机软件的有关技术和管理方法
软件工程的三要素:方法、工具、过程三部分组成
(2). 数据库工程
分为数据库设计 相应的应用设计与实现
数据库应用系统的设计开发必须有软件过程模型作为指导
代码语言:javascript复制典型的软件开发模型:
瀑布模型
瀑布模型过程六阶段:项目规划----系统分析----总体设计----详细设计----编码调试与集成测试----运行维护
快速原型模型
快速原型模型过程五阶段:快速分析----设计构造原型----运行原行----评价原型----改进原型
螺旋模型
螺旋模型过程四阶段:项目规划----风险评估----工程实现----用户评估
3. 数据库应用系统(DBAS)的生命周期模型
(1). 5个基本活动
参照软件工程中软件开发瀑布模型原理
1. 项目规划
规划与分析的主要内容
代码语言:javascript复制1. 系统规划与定义:任务陈述、确定任务目标、确定范围和边界、确定用户视图
2. 可行性分析:技术、经济、操作可行性及开发方案选择
3. 项目规划:项目团队、环境、活动,成本预算,进度计划
2. 需求分析
定义:
需求分析是在计算机系统的软件功能分配和软件设计之间起重要桥梁作用的一项软件工程活动。描述待开发的系统所要完成的功能。
目标:
目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求
获取需求的方法:
面谈、实地观察、问卷调查、查阅资料
过程:
A、标识问题:需求分析的第一步,通过对问题和标识获得的对所有求解问题及其运行环境的理解。 B、建立需求模型:目前在信息系统的需求分析中可使用结构化分析模型或面向对象分析模型。 C、描述需求:需求、功能、信息、性能、环境、其他需求。 D、确认需求:需求确认及评审。审核功能需求、 数据需求、性能、数据管理及其他需求。
需求分析中使用的方法:
<1> 结构化分析与建模方法(SAD,Structured Analysis Design)
代码语言:javascript复制如:DFD建模(体现业务流程)、IDEF建模
结构化分析任务:
建立分析模型(SA)包括:功能模型、数据模型和行为模型
编写规格说明书(SRS)
结构化分析指导思想:
抽象与分解
DFD需求建模方法:
数据流图(Data Flow Diagram, DFD)
从应用系统的数据流着手以图形方法刻画和表示一个具体业务系统的数据处理过程和数据流
数据流:
数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。
如订票单由旅客姓名、年龄、单位、身份证号、日期、目的地等数据项组成。
由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
数据源(终点)
代表系统之外的实体,可以是人、物或其他软件系统。
对数据的加工(处理)
加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。
数据存储
表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等
DFD建模过程(是对功能进行建模)
(1)明确目标,确定系统范围。
(2)建立顶层DFD图
(3)构建第一层DFD分解图。
(4)开发DFD层次结构图(原则:保持均匀的模型深度,按困难程度选择)。
(5)检查确认DFD图。
DFD实例:教材购销系统
代码语言:javascript复制IDEF0需求建模方法(ICAM DEFinition Method)
最常使用的是IDEF0~IDEF4:
IDEF0:描述系统功能及其相互关系;
IDEF1: 系统信息及其数据之间联系;
IDEF2: 系统模拟,动态建模;
IDEF3: 过程描述及获取方法;
IDEF4:面向对象设计;
<2> 面向对象分析与建模方法(OOAD)
代码语言:javascript复制如: UML用例建模
UML方法采用面向对象思想建模,使用用例图来描述系统功能需求。
用例图由系统、角色、用例三种模型元素及其之间的关系构成
准确了解与分析用户需求(包括数据与处理) 最困难、最耗费时间的一步
代码语言:javascript复制需求分析过程由需求获取、需求分析、需求描述与规范说明、需求验证等步骤组成
各种需求的主要工作:
代码语言:javascript复制1. 数据需求分析 :描述用户需要组织的信息内容
形成数据字典
2. 功能需求分析:描述系统做什么
数据处理需求分析、业务规则需求分析
分析与描述目标系统的总体结构、功能活动及各功能活动之间的关系
3. 性能需求分析:描述系统应当做到什么程度
数据操作响应时间、系统吞吐量、硬件资源、单位时间内可以完成的查询数量和事务数量
4. 其他需求:存储需求、安全性需求、备份与恢复需求
3. 系统设计
如果需求分析阶段的任务是解决“干什么”的问题,那么系统设计阶段的任务是确定“怎么干”
系统设计包括:
代码语言:javascript复制概念设计:数据库概念模型设计、系统总体设计
逻辑设计:数据库逻辑结构设计、应用程序概要设计、数据库事务概要设计
物理设计:数据库物理结构设计、数据库事务详细设计、应用程序详细设计
4 实现与部署
也成为DBAS的实施。需要根据设计结果建立数据库,编写应用程序,集成DBAS软硬件,组成完整的DBAS。
包括建立数据库结构,数据加载,事务和应用程序的编码及测试,系统集成、测试与运行,系统部署。
5. 运行于维护
主要包括日常维护、系统监控与分析、系统性能优化调整、系统进化升级等。 这些工作主要由DBA负责
(2). 3条设计主线
根据DBAS的软件组成和各自功能
分类为:
1. 数据组织与存储设计
2. 数据访问与处理设计
3. 应用设计
分别用于: 设计数据库、数据库事务和应用程序
(3). 3个步骤
根据数据库系统三级模式结构,DBAS设计阶段分为
1. 概念设计
2. 逻辑设计
3. 物理设计
五. 数据库的发展
1. 数据管理
数据处理: 对各种数据进行采集、存储、检索、加工、传播、和应用等一系列活动的总和
数据管理: 对数据进行有效的分类、组织、编码、存储、检索、维护、应用,是数据处理的中心问题。
2. 数据管理技术的产生和发展
数据管理技术应数据管理任务的需要而产生的。
人工管理姐阶段
代码语言:javascript复制 20世纪50年代以前
数据是面向应用程序的
文件系统阶段
代码语言:javascript复制 20世纪50年代后期——60年代中期
由专门的软件对数据进行统一管理
代码语言:javascript复制 缺点:
1. 数据共享性差
2. 数据独立性差
3. 数据孤立、数据获取困难
4. 完整性问题
5. 原子性问题
原子性:保证数据库数据一致性,有些操作要么都发生要么都不发生
6. 并发访问异常
7. 安全性问题
数据库管理系统阶段
代码语言:javascript复制 20世纪60年代后期
出现了统一管理数据的专门软件系统——数据库管理系统(DBMS)
代码语言:javascript复制 DBMS特点:
1. 数据结构化
数据内部结构化 数据之间联系 考虑某个应用数据结构,还要整个组织数据结构
2. 数据的共享度高,冗余度低,易扩展
3. 数据独立性高
数据独立性通过数据库管理系统的两层映像功能来实现
4. 数据由数据库管理系统统一管理和控制
1. 数据的安全性保护
2. 数据的完整性检查
3. 并发控制
4. 数据库恢复
3. 数据库应用
- 图书馆管理
- 书店管理
- 教学管理
- 科研管理
- 银行管理
- 售票管理
- 电信管理
- 证券管理
- 销售管理
- 制造业管理
- 固定资产管理
- 人力资源管理
六. 数据库系统
数据库系统(database system,DBS):指在计算机系统中引入数据库后的系统
结构:
1. 从DBMS角度看(内部结构):
数据库系统结构是:外模式/模式/内模式的三级模式
2. 从用户角度看(外部结构):
分为单用户结构、主从式结构、分布式结构、客户/服务器、浏览器/应 用服务器/数据库服务器
组成:
1. 数据库
代码语言:javascript复制用户数据:结构化关系(二维表)组织的所有业务数据集合
元数据:对关系数据库结构的描述数据和数据库的有关统计数据,也成为数据字典
数据字典具体包括以下内容:
1. 所有对象的定义,如:数据库、表、视图、索引、聚集、过程、函数、触发器
2. 数据库对象的逻辑空间与物理空间的对应关系,以及当前使用情况
3. 列的默认值
4. 完整性约束信息
5. 用户的名称、登录密码
6. 审计信息
7. 其他数据库信息,如加锁信息
代码语言:javascript复制索引:改进数据库的性能和可访问性而建立的附加数据
应用元数据:用户窗体、报表、查询和其他形式的应用组件
2. 数据库管理系统
是一组软件,负责数据库的访问、管理和控制。用户对数据库的各种操作请求,都有DBMS来完成,提供数据库的操作环境。
常见DBMS:Oracle、MS SQL server、DB2、Sybase、Access、Mysql、FoxPro
(1). DBMS的功能:
代码语言:javascript复制1. 数据定义
2. 数据组织、存储和管理
3. 数据操纵
4. 数据库的事务管理和运行管理
5. 数据库的建立和维护
6. 数据通信接口
(2). DBMS的组成:
模式更新 对数据库的逻辑结构进行修改
查询 对数据库中数据的查询有两种方式:接口查询;应用程序调用接口
更新 包括插入、删除、修改
查询处理器
代码语言:javascript复制 功能:将用户的查询和更新命令转变为数据库上的操作序列,并执行这些操作
查询处理器负责对查询和更新操作进行语法分析,转换和优化,
产生查询和更新操作如何被执行的操作序列
任务:
1. 对用户请求的SQL操作进行查询优化,从而找到一个最优的执行策略,然后向存储器发出命令,使其执行
2. 把用较高级的语言所表示的数据库操语句转换成一系列对数据库操作的请求
关系数据库管理系统一般向用户提供多种形式的语言:
交互式语言:SQL
嵌入式语言:嵌入式C、嵌入式COBOL
过程化语言:存储过程、T-SQL、PL/SQL
DBMS对各种数据库操作语言的处理过程:
1. DDL语句:首先将它翻译成内部表示,存储在系统的数据字典中。关系型数据库数据字典采用表的方式存储
2. DCL语句:DCL的定义部分,如安全保密定义、存取权限定义、完整性约束
3. DML语句:转化为一串可执行的存取动作
数据字典是DML语句处理、执行以及关系数据库管理系统运行管理的基本依据
存储管理器 根据执行策略,从数据库中获取相应的数据,或更新数据库中的相应数据
事务管理器 负责资源管理、事务调度、保证数据库的一致性,保证多个同时运行的事务不发生冲突,以及保证当系统发生故障时数据不丢失
代码语言:javascript复制 事务被正确执行时的ACID特性:原子性、一致性、隔离性、持久性
保证事务被正确执行的技术:
1. 封锁管理
事务T在对某个数据对象(表、记录)进行操作之前,先向系统发出请求,对其加锁。
2. 事务管理
是用户定义的一个数据库操作序列,这些操作要么全做要么都不做,是一个不可分割的工作单位
3. 日志管理
日志文件用来记录事务对数据库的更新操作的文件
日志管理包括:写日志记录、读日志记录、扫描日志记录、撤销尚未结束的事务和重做已经结束的事务
3. 应用系统
4. 数据库系统相关人员
(1). 数据库管理员(database administrator,DBA)
(2). 最终用户
七. 数据抽象和数据库的三级模式
数据库管理系统主要目的:隐藏关于数据存储和维护的某些细节,为用户提供数据在不同层次上的视图,即数据抽象,方便使用者从不同的角度去观察和利用数据库中的数据
1. 数据抽象
- 物理层抽象(最底层抽象) 描述数据实际上是怎样存储的 详细描述复杂的底层数据的存储结构和存取方法
- 逻辑层抽象 描述数据库中存储什么数据以及这些数据之间存在什么关系
- 视图层抽象(最高层次的抽象) 只描述整个数据库的某个部分,即它是数据库的局部逻辑结构
2. 数据库三级模式结构
- 定义: 数据库管理系统提供观察数据库的3个不同角度,以方便不同的用户使用数据库的需要
- 模式(schema): 是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及模型的描述,不涉及具体的值
- 数据库三级模式结构 定义:指数据库管理系统提供的外模式、模式、内模式3个不同抽象级别观察数据库中数据的角度
3. 数据库的两层映像与数据独立性
为了能够在DBMS的内部实现这3个抽象层次的联系和转换,DBMS在三级模式之间提供了两层映像: 外模式/模式映像、模式/内模式映像 这两层映像保证了数据库管理系统中数据能够具有较高的逻辑独立性和物理独立性
外模式/模式映像(保证了数据与应用程序的逻辑独立性)
代码语言:javascript复制 模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构
对应于一个模式可以有多个外模式,每一个外模式DBMS都有一个模式/外模式映像
当模式改变时(改变关系的结构、属性名称、数据类型等),由数据库管理员对外模式/模式映像作出改变,使外模式保持不变,进而应用程序不必修改
模式/内模式映像(保证了数据和应用程序的物理独立性)
代码语言:javascript复制 数据库中只有一个模式,也只有一个内模式
定义了数据全局逻辑结构与存储结构之间的对应关系
当数据存储结构改变了,由数据库管理员对模式/内模式映像作出相应的改变,可以使模式保持不变,从而应用程序也不必修改
4. 数据库三级模式与三层模型的联系与区别
数据库三级模式结构是指一个DBMS的体系结构,提供模式、外模式、 内模式3个不同角度观察数据库中数据,实现对用户屏蔽DBMS的复杂性,简化交互
数据模型描述数据结构、数据操作、数据约束的数学形式体系。三层数据模型:概念模型、逻辑模型、物理模型。
- 联系
- 区别
他们的目的和作业不一样
三级模式是DBMS的体系结构,目的是:
- 隐藏数据存储和维护的细节,为用户提供数据在不同的层次上的视图,方便使用者从不同角度观察和使用数据
- 支持数据独立性的实现
- 整体结构化的需要,从而使数据共享度高,冗余度低,易扩充
- 部分支持安全性的实现
三层模型是数据库设计的工具个方法,目的是:
- 较真实的模拟现实世界,容易被人理解,便于计算机实现
- 整体结构化的需要,是数据共享度高,冗余度低
- 满足DBMS三级模式结构的要求
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234296.html原文链接:https://javaforall.cn