三大范式&&临时表插入
- 分析实体之间的关系
一对一的关系
造句:一个身份证对应一个人,一个人只有一个身份证
如何表示?
方法一:可以把两个实体用一张表来表示
方法二:可以用两张表来表示,其中一张表包含了另一个表的id
一对多的关系
造句:一个学生一个处于一个班级,一个班级可以包含多个学生
如何表示?
方法一:在班级表中,新增一列,表示这个班级里的学生id都有啥
-- student表(学号,姓名...)
-- class表(班级编号,班级名称,学生列表)
1 java100 1,2,3,4,5,6
2 java200 7,8,9,10,11
方法二:班级表不变,在学生表中,新增一列,classId
-- class表(班级编号,班级名称)
1 java100
2 java101
-- student(学号,学生姓名,所在班级)
1 张三 1
2 李四 1
注意:对于mysql来说表示一对多的时候,只能采用方法二,因为mysql中没有提供类似于“数组”这样的类型,但是redies有数组类型。
多对多的关系
造句:
- 一个学生可以选多个课程,一个课程包含多个学生
- M个学生可以选N门课程
如何表示
仅此一招:使用一个关联表,来表示两个实体之间的关系~
-- 学生表(学号,姓名)
1 张三
2 李四
3 王五
-- 课程表(课程编号,课程姓名)
1 语文
2 数学
3 英语
-- 学生课程表(学号,课程编号)
1 1
1 2
3 1
造句:
学号为1的同学,选了课程编号为1的课程
课程编号为1的课程,包含了一个学号为1的同学
张三选了语文课
语文课上有张三
临时表插入
众所周知select查出来的数据是在内存中的,一旦运行结束数据将会释放!那么临时表插入就能将内存中的数据插入到表中,即写到硬盘,
- 临时表数据写到硬盘
- 列数和数据类型保持一致
-- 准备工作
create table A(id int(10),name varchar(10));
insert into A values(1,'nick01'),(2,'nick02'),(3,'nick03');
create table B(id int(20),name varchar(100));
-- 将A表数据插入到B表
insert into B select * from A;