多表之间的关系
- 分类
- 一对一
如:人与身份证 - 一对多
如:部门与员工 - 多对多
如:学生课程
- 实现方式
- 一对多:在多的一方建立外键,指向一的一方的主键。
- 多对多:多对多关系的实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
- 一对一:可以在任意一方添加外键指向另一方的主键,且给外键添加唯一约束
- 案例
班级与学生(一对多)
学生与课程(多对多)
①班级表
CREATE TABLE class(
cid INT,
name VARCHAR(20));
②学生表
CREATE TABLE student(
id int PRIMARY KEY,
NAME VARCHAR(10),
cid INT,
CONSTRAINT cls_stu FOREIGN KEY (cid) REFERENCES class(cid));
③课程表
create TABLE course(
id INT PRIMARY KEY,
name VARCHAR(20)
);
④为实现学生与课程多对多关系的中间表
create TABLE m_student_course(
sid int,
cid int,
PRIMARY KEY (sid,cid),-- 联合主键
CONSTRAINT tostudent FOREIGN KEY (sid) REFERENCES student(id),
CONSTRAINT tocourse FOREIGN KEY (cid) REFERENCES course(id)
);
范式
- 分类
①第一范式(1NF):每一列都是不可分割的原子数据项
②第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(消除非主属性对主码的部分函数依赖)
③第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(消除传递依赖) - 概念:
①函数依赖:A-->B,如果通过A属性(属性组)的值,可以唯一确定B属性的值,称B依赖于A
②完全函数依赖:A-->B,如果A是一个属性组,而B属性值的确定需要依赖于A属性组中所有的属性
③部分函数依赖:A-->B,如果A是一个属性组,而B属性值的确定只需要依赖于A属性组的某些值
④传递函数依赖:A-->B,B-->C如果通过A属性可以确定唯一B的值,通过B属性可以确定唯一C的值,称C传递依赖于A
⑤码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
⑥主属性:码属性组中所有的属性
⑦非主属性:除去码属性组中的属性
网友评论