2020-08-12数据库的设计

多表之间的关系

  • 分类
  1. 一对一
    如:人与身份证
  2. 一对多
    如:部门与员工
  3. 多对多
    如:学生课程
  • 实现方式
  1. 一对多:在多的一方建立外键,指向一的一方的主键。
  2. 多对多:多对多关系的实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
  3. 一对一:可以在任意一方添加外键指向另一方的主键,且给外键添加唯一约束
  • 案例
    班级与学生(一对多)
    学生与课程(多对多)

①班级表

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
    ⑤码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
    ⑥主属性:码属性组中所有的属性
    ⑦非主属性:除去码属性组中的属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容