IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?

关联任务:

任务五

直播时间:

2018-11-22 15:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?     中品

辅导师兄 [真传弟子]JAVA-徐铭培


大家好,我是IT修真院深圳分院第13期的学员,一枚正直纯洁善良的java程序员
今天给大家分享一下,修真院官网Java任务3,深度思考中的知识点————什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?

1.背景介绍
做一个项目,DB设计是必不可少的,而表与表之间不都是独立的,比如一个学生信息表与教师表就应该存在某种对应的关系,所以我们有必要了解表之间的关系。

2.知识剖析
什么是实体表,什么是关系表?
(1)实体表就是对应实体对象的表,比如:学生表,老师表等,表里存放这他们各自的信息。
(2)关系表是表示表与表之间的数据关系,比如:每个学生表里的学生都对应着教师表里的一个或者多个教师,我们可以用另外的表存放他们之间的关系,当我们需要他们的某些信息时可以根据关系表里的关系查出来。

什么是一对一、一对多和多对多?
(1)一对一、一对多和多对多都是指数据表与表中的数据关系,而不是指表与表之间的关系。
(2)一对一:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。
(3)一对多:一个学生只属于一个班,但是一个班级有多名学生。
(4)多对多:一个学生可以选择多门课,一门课也可以对应着多名学生。

3.常见问题
一对多和多对多应该怎么设计表?

解决方案
1.一对多关系处理:
比如一个班级对应多名学生,这时候我们可以在学生信息表里面加一个字段,用来表示学生对应的班级。
这里不建议通过添加主外键约束,因为这会让你以后在修改和删除表的时候很麻烦。

2.多对多关系处理:
通过学生选课了解多对多问题的处理:每个学生对应多门课,每门课对应多个学生。
(1)在多对多中在一个表中添加一个字段就行不通了,所以处理多对多表问题时,就要考虑建立关系表了。
(2)仅仅对应这里的举例而言,关系表中有三个字段,id,学生id,课程id
(3)根据学生查找课程:根据学生名字查询对应的多个课程。
(4)根据课程查找学生:根据课程名字查询对应的多个学生。

4.编码实战
我们针对多对多关系来演示一下
新建学生表student
在这里插入图片描述
然后建一个课程表course
在这里插入图片描述
接着建一个关系表sc
在这里插入图片描述
最后演示一下
根据课程查询学生

select student_name from student where student.id in (select student_id from sc where course_id in(select id from course where course_name='舞蹈' ));

结果如下
在这里插入图片描述

根据学生查询课程

select course_name from course where course.id in(select course_id from sc where student_id=(select id from student where student_name='李四') );

结果如下
在这里插入图片描述
5.扩展思考


6.参考文献
CSDN、百度百科、师兄们提供的资料

7.更多讨论
(1)为什么不建议通过添加主外键约束 ?
因为在数据库层面通过使用外键的方式进行“硬绑定”,会带来很多额外的资源消耗来进行一致性和完整性校验,即使很多时候我们并不需要这个校验。
所以一般不建议在数据库中使用外键约束来保证数据的一致性和完整性。

(2)查询语句中where … in…怎么用?
where 字段 in (列子查询);
这里,列子查询可能是“多个值”,虽然查询的输出结果是“一列”的,但我们要理解为是“多个值的列表”,其相当于:
where 字段 in (值1,值2,…);比如: where age in (18, 28, 38); 表示age为其中任意一个就可以
(3)查询出来的结果,在mybatis中怎么保存?
可以自定义一个集合用来存放查询出来的结果。

8.鸣谢:
感谢修真院的师兄和CSDN博客上相关的作者,此教程是在他们之前技术分享的基础上完善而成。

9.结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


评论

[无名弟子]李潇 发表于 2018-11-27 16:59:31 #1

不错,继续加油

回复

请您登录 后进行评论