该文章不适合学习数据库,适合考证,遇到实际问题的,不要在这儿浪费时间。切记切记
数据与信息之间的关系可表示为:信息= 数据+数据处理。
模型是对现实世界的模拟和抽象。数据库技术中,表示实体类型和实体类型间关系的模型称为数据模型。分为概念数据模型、结构数据模型。
用于信息世界建模,一般用实体-联系方法(E-R图)表示。常用术语:
实体:用矩形表示
属性:一个实体有多个属性;用椭圆形表示
码:唯一标识实体的属性集
域:属性取值范围,比如性别(男,女)
联系: 用菱形表示
种类包含:实体与实体间的联系;实体内部的联系
类型包含:一对一;一对多;多对多
无向边将实体、属性、联系起来。
结构数据模型是直接面向数据库的逻辑结构,主要包括:层次(树结构)、网状(图结构)、关系和面向对象模型。
是一种用二维表格结构来表示实体以及实体之间联系的数据模型。每个二维表由行、列组成,也可称为关系,关系模式是对关系的描述,可以说关系模型是关系模式的集合。
关系:一张表即为一个关系,表名就是关系名
元组:一条数据就是一个元组,对应存储文件中的一个记录值
属性:表中的每一列就是一个属性,列名即属性名,属性值相当于记录中的数据项或字段值
域:属性的取值范围
关系模式:对关系的描述,由关系名和属性名组成,格式如下:关系名(属性名1,属性名2…属性名n)
常见的关系模式格式为 R(U,F)。
R为关系名
U为关系中的属性
F为属性间的函数依赖,具体见【函数依赖】
通常一个关系模式对应一个关系文件的结构。五码
关系模型由关系数据结构、关系操作集合和关系完整性约束组成。
投影
从关系的垂直方向进行运算,在关系R中选出若干属性组成的新关系。
选择
从关系的水平方向进行运算,在关系R中选出符合条件的元组组成的新关系。
列也可用数字来表示,如果上面的5没带引号,表明是第5列。
连接(这个地方,连接的符号是真没找到怎样表示,麻烦知道的授教,多谢)
连接又分为 θ \theta θ连接、等值连接、自然连接
等值连接: θ \theta θ为等号时,找到关系R和关系S的笛卡尔积中的元组形成的新关系
上方的例子中,当R.A = S.B时,就是等值连接了。
自然连接:找到两关系的笛卡尔积中相同属性列相同的元组,且去除重复列形成的新关系,若有多个相同属性,条件之间的关系为“并且”.
左连接、右连接、全连接(考的几率小)
左连接:左侧关系元组全部保留,右侧关系无对应元组的属性,用Null代替。这会使右侧关系的无对应元组丢失。
右连接:右侧关系元组全部保留,左侧关系无对应元组属性用null代替。这会使左侧关系中无对应元组丢失。
全连接:左右侧关系元组全部保留,两侧无对应的元组属性都用Null代替。这个是为了不丢失两关系中的元组。
除(考的几率小)
步骤:
1、找到左侧关系A中与右侧关系B的相同属性,形成新元组C。
2、找到关系C中与关系B值相同的元组,为A ÷ \div ÷B的值
对于已工作的人就分分钟的事了,不详细写了哈,很容易
投影:即select语句的属性列
选择:即select语句的条件,where后面的
笛卡尔积:from表直接 R,S 即可
自然连接:自然连接可以转成投影、选择、笛卡尔积的式子,按上面的来就可以。自然连接要注意共同属性值相等这个条件欧
存在多种数据库语言,支持不同数据模型,数据的存储结构也不相同,但体系结构上基本都具有“三级模式、两级映像”的特征。
常见于create、alter、drop
// 建表
create table user (
id integer,
username string,
);
// 修改
alter table user add age integer;
alter table user alter username char(5); // 分数据库,有的是modify
alter table user drop username;
// 删除
drop table user;
完整性约束
create table user (
id integer not null unique,
username string not null default '数据库',
);
create table user (
id integer not null unique,
username string not null default '数据库',
cid unique,
primary key(id), // 主键
foreign key(cid) references class(id)
);
create table user (
id integer not null unique,
username string not null default '数据库',
cid unique,
primary key(id), // 主键,实体完整性
foreign key(cid) references class(id),// 参照完整性
check (id >0 and cid >0) // 用户定义的完整性
);
常见于insert 、delete、update
user(id,username,age)
// 插入
insert into user(username,age) values('生活',3728272);
insert into user values(112,'远方',728);
// 更新
update user set username = '诗' where age = 728;
update user set username = '诗',id = 273 where age = 728;
// 删除
delete from user where id = 728;
常见于select
select * from user;
select username from user;
select distinct username from user; // 去除重复元组
select username as '用户名' from user;
select * from user where id in (112,121,113); // 112或是121或是113
select * from user where id not in (112,121,113);
select * from user where id between 30 and 40;
select * from user where username like '%生%'; // 百分号表示可补充任意长度字符
select * from user where username like '生_'; // 下划线表示可补充一个长度的字符
select * from user where username not like '生_';
select * from user where username like '生_' and id = 112;
select * from user where username like '生_' or id = 112;
select * from user where id is null;
select * from user where id is not null;
select * from user where id order by id asc; // 默认,order by必须是select命令的最后一个子句
select * from user where id order by id desc;
// 聚合函数
select AVG(id) from user; // 平均值
select COUNT(*) from user; // 求数量
select MAX(id) from user; // 最大值
select MIN(id) from user; // 最小值
select SUM(id) from user;//总和
// 数据分组,聚合函数在与其他字段同时查询时,会报错
select user_id,SUM(成绩) from score group by user_id; // 按用户分组求每个用户id的成绩和
select user_id,name,SUM(成绩) from score group by user_id,name;
// 条件中要使用聚合函数时,用having
select 学号 from score where 分数 is not null group by 学号 having MIN(分数)>70 and MAX(分数) <90;
select s.score from user u inner join score s on u.id = s.user_id where .....
// 等值连接
select u.user_name from user u,score s where u.id = s.user_id;
// 非等值连接
select u.user_name from user u,score s where s.score between AVG(s.score) and MAX(s.score);
// 自连接
select x.user_name,x.age,x.sex from user x,user y where x.number = '2222' and x.age > y.age
// 左连接,会显示左侧表所有的数据,右侧表不匹配数据丢失
select u.* from user u left join score s on s.user_id = u.id;
// 右连接,会显示右侧表所有的数据,左侧表不匹配数据丢失
select s.* from user u right join score s on s.user_id = u.id;
// 全连接
select s.* from user u full join score s on s.user_id = u.id;
select * from user u where u.id in (select s.user_id from score where score >90)
// ANY,大于任何一个都显示
select * from user where age > ANY(select age from user where sex= 1);
// ALL,比最大的还大才显示
select * from user where age > ALL(select age from user where sex= 1);
// 相关子查询,一个字段既做条件也做结果值
select score,class from class a where score > (select AVG(score) from class b where a.class = b.class)
// exist
select * from user u where exist (select score from score s where u.is = s.user_id);
// not exist
select * from user u where not exist (select score from score s where u.is = s.user_id);
// 并 UNION。两个sql语句中的数据都显示
select 姓名,年龄 from teacher
UNION
select 姓名,年龄 from student
// 交 INTERSECT。两个sql语句中相同的数据显示
select 姓名,年龄 from teacher
INTERSECT
select 姓名,年龄 from student
// 差 EXPECT。从第一个结果中去除第二个结果中的值
select 姓名,年龄 from teacher
EXPECT
select 姓名,年龄 from student
// 授权
grant update(name) on table user to user1 with grant option;
grant select on table user,score to user1 ,user2;
grant all privileges on table user to user1;
grant createtab on database basename to user1;
// 收回权限
revoke createtab on database basename from user1;
revoke select on table user from public
视图其实就是虚拟表,根据条件选出另一表中符合的数据。同理视图生成之后,向视图中添加数据就是向对应的表中添加数据。可对应多个表
create view student
as select name,id from user where type = '学生';
// 此时不加 with check option ,可以随意向视图中添加数据。
create view student
as select name,id from user where type = '学生' with check option;
// 加上 with check option后,只有类型是学生的数据才可以被加进去,否则会报错。且这个限制只有存在where条件才生效。
// 删除视图
drop view student;
创建索引修改的是内模式–存储文件。
// 唯一索引,单个值在表中只能有一条数据
create unique index indexName on user(user_id);
// 聚簇索引,索引项顺序是与表中记录的物理顺序一致的索引组织。
create cluster index indexName on user(user_id);
组合属性才存在完全、部分函数依赖区分,单个属性就是完全函数依赖
常考候选关键字、主属性、非主属性。
可以求出闭包来的属性或者属性组合被叫做候选关键字(候选码属性组合中的任一真子集不可求出闭包)。找关键字从箭头左侧的属性中找就可以,因为右侧的属性都是被决定的。
A->ABC->ABCD = U
这里A就是候选关键字。
如果说从AC开始求闭包,其实也可以求出来,但是AC中的A单独就可以求出来,所以AC不可以被称为候选关键字。其中候选关键字中的属性叫做主属性,未在候选关键字中的属性叫非主属性。若有多个候选码,可选择其中一个作为主码。
主键为全码就是所有属性为候选关键字。
检查符合第几范式的标准:
1NF:属性是否不可再分
2NF:非主属性是否全部完全函数依赖候选码
3NF: 非主属性是否全部非传递依赖于主属性
BFNF:主属性是否对于候选码有部分函数依赖或者传递依赖(不常考)
表示方式:X->->Y
X多值决定Y,Y多值决定X
比如:一门课有多个讲师授课,需要用到多本辅导书。
对于关系R的每个非平凡多值依赖X->->Y,X都包含了R的一个候选码,则称R为第四范式。
常考题:
一般都符合第一范式,那么就要判断是否存在部分函数依赖(不存在,就是第二范式)和传递依赖(不存在,就是第三范式)。
传递依赖要注意有两种情况:
一般这种题,会将关系分解的结果给出来,我们需要将分解后的各关系使用自然连接,判断其结果是否等于关系的全集,若等于,为无损连接;若不等于,则是有损连接。
是否保持函数依赖,就要看新的关系中是否还能得到题目中给的依赖关系(包含传递)
数据库设计策略:自顶向下和自底向上
实体-关系模型
(本文上方也有)
属性分类
不常见的
冲突类型
E-R图设计好之后,需要经过选择应用-> 设计分E-R图->合并E-R图
可能会存在的冲突类型:
一对一关系转关系模型
厂长(姓名,性别,年龄)
工厂(厂号,厂名,地点)
方法一:关系名为关系模式的名称,与之有关的两实体的主键和关系的属性(如果有的话)为关系模式的属性
管理(姓名,厂名,管理方式)
方法二:将其中一实体的主码与关系的属性放入另一实体的属性中
厂长(姓名,性别,年龄,厂名,管理方式)
或者
工厂(厂号,厂名,地点,姓名,管理方式)
一对多关系转关系模型
仓库(仓库号,地点,面积)
商品(货号,商品名,价格)
方法一:关系名为关系模式的名称,与之有关的两实体的主键和关系的属性(如果有的话)为关系模式的属性
仓储(仓库号,货号,数量)
方法二:将联系归并到实体的多方,给实体增加另一方的主码和关系的属性作为关系模式的属性。
商品(货号,商品名,价格,仓库号,数量)
多对多关系转关系模型
关系名为关系模式的名称,与之有关的两实体的主键和关系的属性(如果有的话)为关系模式的属性
选修(学号,课程号,成绩)
不考
不考
要么不做,要么都做
为应对数据库系统因软、硬件故障导致的数据丢失或损坏,需要做一些可恢复数据的措施。
恢复的基本原理是“建立数据冗余”,即进行数据转储和登记日志文件。
为保证数据库中数据的安全可靠和正确有效,在进行事务处理时,对数据的插入、删除或修改的全部有关内容写入日志文件;当系统正常运行时,按一定时间间隔,将数据库缓冲区内容写入数据文件;发生故障时,根据现场数据内容及相关文件恢复系统状态。
并发控制的主要技术是封锁。分为排它锁(X锁或读锁)和共享锁(S锁或写锁)
排它锁:某一事物对数据加了排它锁之后,可读取修改,其他事务不可再对数据加任何锁
共享锁:某一事物对数据加了共享锁之后,可读取,其他事物也对数据加共享锁