面试经验复习之数据库(三)

数据库

1、数据库第三范式

(1)第一范式(1NF)

在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。

所谓第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

(2)第二范式(2NF)

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以被唯一的区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。

(3) 第三范式

满足第三范式必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字信息。

2、事务

数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要 么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要称为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

  • 原子性:在数据库系统中,一个事务的所有操作要么全部成功,要么全部失败。
  • 一致性:数据库系统中的事务操作必须使数据库从一个一致性状态转移到另一个一致性状态
  • 隔离性:当多个用户请求数据库时,数据库开启多个事务同时处理某个数据库,隔离性保证各个事务事件互不干扰
  • 持久性:对数据库的修改是持久的,一旦修改就算数据库系统出现故障,这种修改也不会丢失

事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。

3、触发器

触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

触发器有如下作用:

  • 可在写入数据表前,强制检验或转换数据
  • 触发器发生错误时,异动的结果会被撤销
  • 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器
  • 可依照特定的情况,替换异动的指令(INSTEAD OF)

我为什么要用触发器?比如,这么两个表:

Create Table Student(           -- 学生表
	StudentID int primary key,  -- 学号
	...
)

Create Table BorrowRecord(				-- 学生借书记录表
	BorrowRecordNO int identity(1,1),	-- 流水号
	StudentID int,						-- 学号
	BorrowDate datetime,				-- 借出时间
	ReturnDate datetime,				-- 归还时间
	...
)

用到的功能有:

  1. 如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
  2. 如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
    等等。

这时候可以用到触发器。对于1, 创建一个Update触发器:

Create Trigger truStudent
	On Student		-- 在Student表中创建触发器
	for Update		-- 为什么事件触发
	AS				-- 事件触发后所要做的事情
	if Update(StudentID)
	begin
	Update BorrowRecord
	Set StudentID = i.StudentID
	From BorrowRecord br, Deleted d, Inserted i		-- Deleted 和Inserted临时表
	Where br.StudentID = d.StudentID
END

理解触发器里面的两个临时的表:Deleted,Inserted。注意Deleted与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。

一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:

虚拟表Inserted虚拟表Deleted
在表记录新增时存放新增的记录不存储记录
修改时存放用来更新的新记录存放更新前的记录
删除时不存储记录存放被删除的记录

一个Update的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

4、存储过程

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
例子:
该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的订单ID号码(@o_id),由订单明细表(orderdetails)中计算该订单销售总额【单价(Unitprice) * 数量(Quantity)】,这一金额通过@p_tot这一参数输出给调用这一存储过程的程序。

CREATE PROCEDURE order_tot_amt
@o_id int,
@p_tot int output
AS
SELECT @p_tot=SUM(Unitprice*Quantity)
FROM orderdetails
WHERE orderid=@o_id
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值