MySQL基础关键_010_数据库设计三范式

目  录

一、概述

二、三范式

1.第一范式(必须遵循)

2.第二范式

3.第三范式

 三、三范式设计

1.一对多

2.多对多

3.一对一

(1)主键共享

(2)外键唯一


一、概述

  1. 数据库设计三范式就是数据库表的设计原则,帮助有效、节省空间的设计表;
  2. 但是最终应该考虑实际需求,可能会以空间换取时间,不一定完全遵循三范式设计原则。

二、三范式

1.第一范式(必须遵循)

  1. 任何一张表都应该有主键
  2. 每个字段是原子性的,不可再分

2.第二范式

  1. 建立在第一范式基础之上
  2. 所有非主键字段完全依赖主键,不能产生部分依赖。 

3.第三范式

  1. 建立在第二范式基础之上
  2. 所有非主键字段不能传递依赖于主键字段

 三、三范式设计

1.一对多

  1. 方案:一对多,两张表,多的表,加外键
  2. 实例:表 3.1 与 表 3.2 是一对多关系,所以在 表 3.2 中添加外键。

表 3.1 schools 表

id(primary key) name
1 山河四省实验中学
2 山西省直属第二中学校
3 山东省直属第三中学校
4 河南省直属第四中学校
5 河北省直属第五中学校

表 3.2 teachers 表

id(primary key)

name age school_id(foreign key)
1101 王明 23 2
1102 邱钰红 22 3
1103 宋刚 18 5
1104 李志强 17 1
1105 胡建国 19 4

2.多对多

  1. 方案:多对多,三张表,关系表,加外键
  2. 实例:表 3.3 与 表 3.4 是多对多关系,所以新增关系表(表 3.5),在表 3.5 中添加一个主键,两个外键。

表 3.3 students 表

id(primary key) name age
20251613001 赵东 21
20251613002 韩弘毅 23
20251613003 张冬雪 22
20251613004 郭芸 21
20251613005 陆洋 19

表 3.4 courses 表

id(primary key) name
1001 语文
1002 数学
1003 英语
1004 物理
1005 化学

表 3.5 student_course 表

id(primary key)

student_id(foreign key) course_id(foreign key)
1 20251613001 1001
2 20251613001 1005
3 20251613002 1002
4 20251613002 1003
5 20251613003 1001
6 20251613003 1004
7 20251613004 1002
8 20251613004 1005
9 20251613005 1004
10 20251613005 1005

3.一对一

  1. 方案:
    1. 主键共享
    2. 外键唯一

(1)主键共享

        实例:婚姻表。表 3.6 与 表 3.7 是一对一关系,所以在表 3.7 中 id 既是主键,又是外键。

表 3.6 men 表

id name
1 张三
2 李四
3 王五

表 3.7 women 表

id(primary key + foreign key) name
2 马六
1 冯七
3 赵八

(2)外键唯一

        实例:婚姻表。男性表与 表 3.6 相同,保持不变。对女性表进行修改,新增一列设置外键约束,保证对应 表 3.6 独一无二。

表 3.8 外键唯一的 women 表

id(primary key) name man_id(foreign key + unique)
1 马六 2
2 冯七 1
3 赵八 3

你可能感兴趣的:(MySQL,mysql,数据库)