基本概念:
(1)候选码:一个或一组属性能唯一的标识一个元组,而其子集不能
例:Student表中的学号sno
(2)主码:若有多个候选码,则选其中一个为主码
例:SC表里面学号sno和课程号cno
(3)外键,也称外码:一个表中一个(多个)属性,不是自身的主码,且这个属性和另一个表中的主码属性是同一个属性,则这个(组)属性称为外码
例:Student表中的主键是Sno,
Course表中的主码是课程号,
而Sc表中的主键是sno和课程号cno(两个组合在一起构成主码,由学号和课程号确定成绩,且这两个属性是两个不同表中的同一个属性)
Sc表中的外码是sno和cno(这两个属性是两个不同表中的同一个属性)
(1)实体完整性:主码不能重复,主码不能为空
例:学生表里面学号不能为空,且不能重复
(2)参照完整性:外键不能为空(或者均为空值)。外键等于被参照表的主码值
例:Sc表中的学号sno参照了student表中的sno(且这两个值必须相等),Sc表中的cno参照了course中的cno
(3)用户定义完整性:用户自己定义的完整性约束条件
▲可能出现考题:创建一个表,给出属性以属性的条件,定义主键和外键,而且当你更新或删除与外键有关的另一个表时,这个表是否要级联,拒绝删除、更新
(1)数据类型
①char(n):长度为n的定长字符串
②varchar(n):最大长度为n的变长字符串
③int:长整数(4字节)
④smallint:短整数(2字节)
(2)定义主键、外键
①主键:primary key(属性1,属性2)
②外键:foreign key (外键)(属性1,属性2) references 被参照表 (主键)两者属性相同
③级联更新/删除: on update/delete cascade
④拒绝更新/删除:on update/delete no action
注:一般③④跟在外键后面
(3)结构
create table 表名
(属性 数据类型[constraint] 定义的约束条件//可省(包括①非空:not null ②唯一:unique)
属性 数据类型[constraint] 定义的约束条件 ③check:自己定义的约束条件 ④定义为主码
…
primary key(属性1,属性2…)) //定义主键
foreign key(外键属性) references(参照) 被参照表(属性) on update/delete
…)
例:定义SC表中的参照完整性
create table Sc (sno char(9) not null,
cno char(4) not null,
grade smallint,
prinmary key(sno,cno),
foreign key (sno) references student(sno),
foreign key (cno) references student(cno));
外键:Sc表中的学号sno参照了student表中的sno(且这两个值必须相等),Sc表中的cno参照了course中的cno
(4)授权
grant 权限(select) on 对象类型(table,view) 对象名 to 用户 [with grant option] //可省,加上表示可以将这个权限授予其他用户
例:通过角色来实现将一组权限授予一个用户
create role R1;
使用grant语句让R1拥有student表中的select、update、insert权限
grant select ,update,insert on table student to R1;
将这个角色授予王平
grant R1 to 王平;
(5)对权限收回
revoke 权限(如select)on 对象类型(如table,view )to 用户
revoke select on table student from R1;
1.1NF:关系中的每个属性都是原子,不可再分的,每个关系都要满足1NF (平表不可嵌套)
2.2NF:满足1NF且这张表中不存在属性对主键的部分函数依赖(部分函数依赖指的是依赖于主键的一部分)
例:s(sno,sname,age,cno,grade)
主键(sno,cno) ,成绩由sno,cno共同决定
但sname,age仅由sno就可以决定,即sname,age只依赖于主键的一部分,所以不满足2NF
解决办法:“一事一地“ ,就是一张表只管一件事,拆分原表
把学生表分成学生基本信息和选课表
s(sno,sname,age)
sc(sno,cno,grade)
3.3NF:满足2NF且不存在属性对主键的传递依赖
例:Teacher(Tno ,sal_level,salary)
Tno ---->(决定)sal_level
sal_level—>(决定)salary
将2级工资水平的工资2000改为2级工资水平的工资3000,虽然工号没有变,但是工资额已经变了
老师号决定工资级别,工资级别决定工资多少,这就是典型的传递依赖
解决方案:“一事一地“
将其分为Teacher(T#,sal_level)
level(sal_level,salary)
4.BCNF:要求关系模式中,属性之间的函数依赖关系里面的决定值都必须为主键
例:邮政编码,城市,街道
城市和街道可以决定邮政编码,可以由邮政编码反过来知道城市和街道;存在这种关系就不是BCNF范式,但它是3NF范式
1.基本概念
(1)实体:□(矩形)
(2)属性:椭圆
(3)联系:◇(菱形)
2.画E-R图
3.转换为关系模型
(1)E-R图的实体转为关系(表名)
(2)E-R图的属性转换为关系的属性
(3)联系转换
①联系种类:一对一 1:1、一对多 1:n、多对一 n:1 、多对多n:m
②联系转换方法
a.1:1 两种方法
第一种:将联系转换成一个关系(表),这个关系的属性是两个关系的主码+联系的属性
第二种:将一个关系的主码+联系的属性写到另一个关系中
b.1:n 转换两种方法
第一种:将联系转换成一个关系(表),这个关系的属性是两个关系的主码+联系的属性
第二种:此时是将联系的1:n中1端关系的主码写到n端上
c.n:m