软件项目的开发周期

  • 需求分析
  • 最困难、最耗费时间的一步,也是整个设计过程的基础。
  • 主要任务是对现实世界中要处理的对象(公司、部门及企业,也可以理解成客户)进行详细调查,然后通过分析,逐步明确客户/用户对系统的需求,包括数据需求和业务处理需求。
  • 概要设计
  • 概要设计是数据库设计的关键,通过综合、归纳与抽象用户需求,形成一个具体 DBMS 的概念模型,也就是绘制数据库的 E-R 图。
  • E-R 图主要用于在项目团队内部,设计人员和客户之间进行沟通,确认需求信息的正确性和完整性。
  • 逻辑设计/详细设计
  • 将 E-R 图转换为多张表,进行逻辑设计,确认各表的主外键,并应用数据库设计的三大范式进行审核,对其优化。
  • 代码编写
  • 经项目组开会讨论确定 E-R 图后,根据项目的技术实现,团队开发能力及项目的成本预算,选择具体的数据库(如 MySQL 或 Oracle 等)进行物理实现。
  • 软件测试
  • 数据库应用系统经过试运行后即可投入正式运行。在运行过程中必须不断地对其进行评价、调整与修改。
  • 安装部署

概念模型

  • 概念模型是一种或多或少的形式化描述,描述的内容包括建立软件组件时,所用到的算法、架构、假设与底层约束。这通常是对实际的简化描述,包括一定程度的抽象,显式或隐式地按照头脑中的确切使用方式进行构建。对概念模型的验证包括确保所用的理论和假设是正确的;当考虑模型的特征时,确保所规划的用途是合理的。
  • 概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象。
  • 概念数据模型是面向用户、面向现实世界的数据模型,是与DBMS无关的。
  • E-R方法是设计概念模型时常用的方法。用设计好的ER图再附以相应的说明书可作为阶段成果。

概念模型设计可分三步完成:

  1. 局部模型:
  1. 确定局部概念模型的范围;
  2. 定义实体;
  3. 定义联系;
  4. 确定属性;
  5. 逐一画出所有的局部ER图,并附以相应的说明文件
  1. 全局模型:
  1. 确定公共实体类型
  2. 合并局部E-R图;
  3. 消除不一致因素;
  4. 优化全局E-R图;
  5. 画出全局E-R图,并附以相应的说明文件。
  1. 模型评审:
  1. 第一部分是用户评审。
  2. 第二部分是开发人员评审。
  • 数据库系统开发流程,分别为概念模型、逻辑模型和物理模型3种。
  • 概念模型也是信息模型,即把现实世界的客观对象抽象为某种信息结构,是按照用户的观点对信息建模。
  • 逻辑模型和物理模型为机器世界中DBMS所支持的数据模型,它们是计算机中数据组织、存储和管理的基础,主要用于DBMS的实现,关系数据库的模型是关系模型。
  • 概念模型到逻辑模型的转换由数据库设计人员完成;物理模型是面向计算机系统的,主要用于选择逻辑模型数据与联系在计算机内部的表示方式和存取方法,物理模型的具体实现是DBMS的任务,即逻辑模型转换为物理模型由DBMS完成。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Je4XmpFg-1628651264137)(C:\Users\Sunlight-9Y9\AppData\Roaming\Typora\typora-user-images\image-20210721104300431.png)]

E-R模型

  • E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界概念模型
  • 用**“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”或圆角矩形表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;用”菱形框**“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。
  1. 矩形框:表示实体,在框中记入实体名。
  • 弱实体(weak entity)是一种数据库系统术语。其定义为一个实体对于另一个实体(一般为强实体,也可以是依赖于其他强实体的弱实体)具有很强的依赖联系,而且该实体主键的一部分或全部从其强实体(或者对应的弱实体依赖的强实体)中获得,则称该实体为弱实体。
  1. 菱形框:表示联系,在框中记入联系名。
  2. 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
  • 简单属性
  • 符合属性
  • 键属性
  1. 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
  • 作图步骤:
  1. 确定所有的实体集合;
  2. 选择实体集应包含的属性;
  3. 确定实体集之间的联系;
  4. 确定实体集的关键字,用下划线在属性上表明关键字的属性组合;
  5. 确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n(多)来表示联系的类型。
  • 各分E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。

数据库设计范式



PL/SQL

  • PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。
  • 与sql的区别在于sql既没有变量,也没有流程控制(分支,循环)。在执行sql语句时,每条sql语句都是逐一发送到数据库,而PL/SQL可以一次将多条sql语句一起发送给数据库,减少网络流量。

PL/SQL语法结构

declare --声明部分 begin --程序编写 exectpion --处理异常 end;

  • 声明部分(declare):包含变量定义,用户定义的PL/SQL类型,游标,引用的函数和过程
  • 执行部分(begin):包含变量赋值,对象初始化,条件结构,迭代结构,嵌套的PL/SQL匿名块,或是对局部或存储PL/SQL命名块的调用
  • 异常部分(exception):包含错误处理语句,该语句可以像执行部分一样使用所有项
  • 结束部分(end):程序执行到end表示结束,分号用于结束匿名,而斜杠(/)执行块程序
  • PL/SQL是一门强类型的编程语言,所有变量需要声明之后才能使用,变量都要求declare部分声明
  • 变量名称可以是由字母,数字,_,$,#等组成
  • 不能使用系统保留字,要求是字母开头
  • 变量名称长度最多只能30个字符

变量名称 [constant] 类型 [not null] [:=value]; //constrant:定义常量,必须声明时为其赋予默认值 //not null:表示该变量不能设置为null //:=value:设置初始化内容

  • PL/SQL变量是不区分大小写
  • 使用%TYPE声明变量类型
  • ”变量定义 表名称.表字段%TYPE “ 的格式
  • 使用%ROWTYPE声明变量类型

运算符

  • 赋值运算符:给常量或变量赋值
  • 连接运算符:可以将多个字符串进行连接
  • 关系运算符:比较大小,返回布尔类型,如果有一个为null,则结果为null

运算符

描述

示例

=

检查两个操作数的值是否相等,如果是的话那么条件为真。

(A = B) 结果为 false.

!=,<>,~=

检查两个操作数的值是否相等,如果值不相等,则条件变为真。

(A != B) 结果为 true.

>

检查左边的操作数的值是否大于右操作数的值,如果是的话那么条件为真。

(A > B) 结果为 false.

<

检查左边的操作数的值是否小于右操作数的值,如果是的话那么条件为真。

(A < B) 结果为 true.

>=

检查左边的操作数的值是否大于或等于右操作数的值,如果是的话那么条件为真。

(A >= B) 结果为 false.

<=

检查左边的操作数的值是否小于或等于右操作数的值,如果是的话那么条件为真。

(A <= B) 结果为 true.

  • 逻辑运算符:与,或,非

运算符

描述

示例

and

称为逻辑AND运算。如果两个操作数为true,则条件为true

(A and B) 结果为 false.

or

所谓的逻辑或操作。如果任何两个操作数为true,则条件变为true

(A or B) 结果为 true.

not

所谓逻辑非运算符。用于反向操作数的逻辑状态。如果条件为true,那么逻辑非运算符将使它为false

not (A and B) 结果为 true.

  • 比较运算符:

运算符

描述

示例

LIKE

LIKE操作一个字符,字符串或CLOB值进行比较匹配模式则返回TRUE,如果不匹配模式则FALSE

如果 ‘Zara Ali’ like ‘Z% A_i’ 返回一个布尔值true, 然而, ‘Nuha Ali’ like ‘Z% A_i’ 返回布尔值 false

BETWEEN

BETWEEN 运算符测试一个值是否位于规定的范围内. x BETWEEN a AND b 意思就是 x >= a and x <= b.

如果 x = 10 那么 x between 5 and 20 返回 true, x between 5 and 10 返回 true, 但是 x between 11 and 20 返回 false

IN

IN运算符的测试设置成员. x IN (set) 意味着x等于集合中的某一个成员

如果 x = ‘m’ then, x in (‘a’, ‘b’, ‘c’) 返回布尔值false,但x在(‘m’, ‘n’, ‘o’) 返回布尔值 true.

IS NULL

IS NULL运算符返回布尔值true,如果它的操作数是NULL或FALSE(如果它不为NULL)。包括NULL值的比较总能取得NULL

如果 x = ‘m’, 那么 ‘x is null’ 返回布尔值false

  • 算术运算符:

运算符

描述

示例

+

相加两个操作数

A + B = 15

-

第一个操作数减去第二个操作数

A - B = 5

*

两个操作数相乘

A * B = 50

**

乘方运算

A ** B = 100000

/

两个操作数相除

A / B = 2

  • 运算符的优先级:

运算符

操作符

**

指数运算

+, -

加法,取反

*, /

乘法,除法

+, -,

加,减,并置

=, <, >, <=, >=, <>, !=, ~=, ^=,

IS NULL, LIKE, BETWEEN, IN

比较

NOT

逻辑否定

AND

关联

OR

包含

  • PL/SQL数据类型:

分类

描述

标量(scalar)

单值没有内部组件,如NUMBER, DATE 或 BOOLEAN

大对象(LOB)

指向其他数据项,如文本,图形图像,视频剪辑和声音等存储大对象

复合(composite)

具有可单独访问的内部组件的数据项。例如,集合和记录

引用(reference)

指向其他数据项

  • 标量数据类型

类型

说明

VARCHAR2(长度)

可变长度字符串,Oracle SQL定义的数据类型,在PL/SQL中使用时最常32767字节。在PL/SQL中使用没有默认长度,因此必须指定。

NUMBER(精度,小数)

Oracle SQL定义的数据类型,以十进制方式存储,计算时为二进制数据运算。占用32个字节

DATE

Oracle SQL定义的日期类型,是一个7个字节的列,不包含秒

TIMESTAMP

date的子类型,时间包含毫秒。Oracle SQL定义的日期类型,有timestamp with time zone和timestamp with local time zone

CHAR(长度)

Oracle SQL定义的日期类型,固定长度字符,最长32767字节,默认长度是1,如果内容不够用空格代替。

LONG

Oracle SQL定义的数据类型,变长字符串基本类型,最长32760字节。在Oracle SQL中最长2147483647字节。

BOOLEAN

PL/SQL附加的数据类型,逻辑值为TRUE、FALSE、NULL

BINARY_INTEGER

PL/SQL附加的数据类型,介于-231和231之间的整数。

PLS_INTEGER

PL/SQL附加的数据类型,介于-231和231之间的整数。类似于BINARY_INTEGER,只是PLS_INTEGER值上的运行速度更快。

NATURAL

PL/SQL附加的数据类型,BINARY_INTEGER子类型,表示从0开始的自然数。

NATURALN

与NATURAL一样,只是要求NATURALN类型变量值不能为NULL。

POSITIVE

PL/SQL附加的数据类型,BINARY_INTEGER子类型,正整数。

POSITIVEN

与POSITIVE一样,只是要求POSITIVE的变量值不能为NULL。

REAL

Oracle SQL定义的数据类型,18位精度的浮点数

INT,INTEGER,SMALLINT

Oracle SQL定义的数据类型,NUMBERDE的子类型,38位精度整数。

SIGNTYPE

PL/SQL附加的数据类型,BINARY_INTEGER子类型。值有:1、-1、0。

STRING

与VARCHAR2相同。

  • 创建子类型:
subtype 子类型名称 is 父类型[(约束)] [not null]

程序结构

  • 顺序结构
  • 分支结构
  • if, if…else…, if…elseif…else…语句
if conditions then
	满足条件执行的行为
end if;
---------------------------------------
if 判断条件 then
	满足条件时执行的语句;
else
	不满足条件执行的语句;
end if;
----------------------------------------
if 判断条件A then
	满足条件A的执行语句;
elseif 判断条件B then
	满足条件B的执行语句;
...
else
	以上条件均不满足时需要执行的语句;
end if;
  • case语句
case [变量]
when [值|表达式] then
	执行语句块;
when [值|表达式] then
	执行语句块;
when [值|表达式] then
	执行语句块;
else
	条件均不满足时执行的语句块;
end case;
  • 循环结构
  • LOOP循环语法
--先执行后判断
LOOP
	循环执行的语句块;
	exit when 循环结束条件;
	循环结束条件修改;
end loop;
---------------------------
--先判断后执行
while(循环结束条件) loop
	循环执行语句块;
	循环结束条件修改;
end loop;
  • for循环语法
for 循环索引 in [reverse] 循环区域下线 .. 循环区域上线 loop
	循环需要执行的语句;
end loop;
  • 循环控制
  • 使用exit退出循环
  • 使用continue结束当前轮循环
  • goto语句:再进行分支结构的代码中,也可以进行跳转代码的操作,主要使用goto语句来完成。goto语句为无条件转移语句,直接转移到指定标号处。goto语句不能直接转入到if语句,循环体和子块中,但可以从if语句,循环体和子块中转出。(尽量不要使用goto语句)
  • 内部程序块
declare
	--声明部分
begin
	declare
		--子程序声明部分
	begin
		--子程序编写、
	exectpion
		--子程序处理异常
	end;
	....
execption
	--处理异常
end;
  • 异常处理
  • 设计错误,编码错误,硬件故障等等原因引起的程序运行错误。在PL/SQL中的异常处理机制,使得在出现某些错误的时候依然可以执行,在PL/SQL中一共可以分为编译型异常和运行时异常。
  • 使用exception处理异常
when 异常类型|用户定义异常|异常代码|others then
异常处理;
  • 用户自定义异常
  • 在声明中声明exception对象,此方法有两种选择
  • 声明异常对象并用名称来引用他,此方法使用普通的others异常捕获用户自定义异常
  • 声明异常对象并将它与有效的Oracle错误代码映射,需要编写单独的when语句块捕获
  • 在执行块构建动态异常。通过raise_application_error函数可以构建动态异常。在触发动态异常时,使用-20000~~-20999范围的数字。如果使用动态异常,可以在运行时指派错误信息。
pragma exception_int(异常名称,Oracle错误代码);//为自定义异常设置代码
raise_application_error(错误号,错误信息[,是否添加到错误堆栈]);
//错误号:只能接受-20000~-20999范围的错误号,与声明的错误号一致
//错误信息:用于定义在使用sqlerrm输出时的错误提示信息
//是否添加到错误堆栈中:如果为true,则表示将错误添加到任意已有的错误堆栈,默认为false
  • 设置动态异常时,raise_application_error中的错误号与pragma exception_init的需要一致。

,可以在运行时指派错误信息。

- ```sql
  pragma exception_int(异常名称,Oracle错误代码);//为自定义异常设置代码
  ```

- ```sql
  raise_application_error(错误号,错误信息[,是否添加到错误堆栈]);
  //错误号:只能接受-20000~-20999范围的错误号,与声明的错误号一致
  //错误信息:用于定义在使用sqlerrm输出时的错误提示信息
  //是否添加到错误堆栈中:如果为true,则表示将错误添加到任意已有的错误堆栈,默认为false
  ```

- 设置动态异常时,raise_application_error中的错误号与pragma exception_init的需要一致。
-

kettle

  • Kettle有三个主要组件:Spoon、Kitchen、Pan
  1. Spoon:是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。
  2. windows选择Spoon.bat;Linux选择Spoon.sh
  3. Kitchen:利用Kitchen可以使用命令行调用Job
  4. Pan:利用Pan可以用命令行的形式调用Trans
  5. Carte:Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server。
  1. 数据仓库(data warehouse,DW)
  2. 数据集市层(dataMart,DM)
  3. 操作数据存储(operational data store,ODS)
  4. 商业智能(business intelligence,BI)
  5. 联机分析处理(on_line analytical processing,OLAP)