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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/84473586

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
1 背景介绍】

大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务二里面的知识点:
什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
1 背景介绍
在任务三设计数据库的时候,需要理清表与表数据之间的关系,这时候就需要知道什么是实体表和关系表。然后根据他们之间的关系设计表

2.知识剖析
2.1什么是实体表
实体表就是对应实际的对象的表,比如:学生表,老师表
2.2什么是一对一、一对多和多对多?
1.一对一、一对多和多对多都是指数据表与表中的数据关系,不是表与表之间的关系

2.一对一:一个班主任只属于一个班级,一个班级也只能有一个班主任

3.一对多:一个顾客对应多个订单,而一个订单只能对应一个客户

4.多对多:一个学生有多个老师,一个老师有多个学生

2.3什么是关系表
关系表是表示表与表之间的数据关系,我的理解是:关系表设计一般只存在多对多。

3.常见问题

1)什么是实体表?

2)什么是关系表?

3)怎么设计表,多对多怎么在实际代码中表示?

4.解决方案:
设计表:一对一和一对多在表中多加一个关联字段,多对多多设计一个关联表
代码中实体类的编写:一对一在实体类中多加一个属性,一对多在实体类中多加一个集合属性,多对多就是在两个实体类中各加一个集合属性

5.编码实战
学生表
在这里插入图片描述
老师表
在这里插入图片描述
关系表
在这里插入图片描述
学生实体类

package mybatisTest.pojo;

import java.util.List;

public class Student {
    private Integer stuId;
    private String stuName;
    private Integer age;
    private List<Teacher> teachers;

    public Integer getStuId() {
        return stuId;
    }

    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<Teacher> getTeachers() {
        return teachers;
    }

    public void setTeachers(List<Teacher> teachers) {
        this.teachers = teachers;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuId=" + stuId +
                ", stuName='" + stuName + '\'' +
                ", age=" + age +
                ", teachers=" + teachers +
                '}';
    }
}

老师实体类
package mybatisTest.pojo;

import java.util.List;

public class Teacher {
private Integer teaId;
private String teaName;
private String gender;
private List students;

public Integer getTeaId() {
    return teaId;
}

public void setTeaId(Integer teaId) {
    this.teaId = teaId;
}

public String getTeaName() {
    return teaName;
}

public void setTeaName(String teaName) {
    this.teaName = teaName;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public List<Student> getStudents() {
    return students;
}

public void setStudents(List<Student> students) {
    this.students = students;
}

@Override
public String toString() {
    return "Teacher{" +
            "teaId=" + teaId +
            ", teaName='" + teaName + '\'' +
            ", gender='" + gender + '\'' +
            ", students=" + students +
            '}';
}

}
dao层接口

package mybatisTest.dao;

import mybatisTest.pojo.Student;


import java.util.List;

public interface StuDao {
    List<Student> queryStu();
}
package mybatisTest.dao;


import mybatisTest.pojo.Teacher;

import java.util.List;

public interface TeaDao {
    List<Teacher> queryTea();
}

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatisTest.dao.StuDao">
    <resultMap id="student" type="mybatisTest.pojo.Student">
        <result property="stuId" column="stu_id"/>
        <result property="stuName" column="stu_name"/>
        <result property="age" column="stu_age"/>
        <collection property="teachers" ofType="mybatisTest.pojo.Teacher">
            <id property="teaId" column="tea_id"/>
            <result property="teaName" column="tea_name"/>
            <result property="gender" column="gender"/>
        </collection>
    </resultMap>
    <select id="queryStu" resultMap="student">
        select s.*,t.*
        from student s,teacher t,stu_tea st
        where s.stu_id=st.stu_id and t.tea_id=st.tea_id
    </select> 
</mapper>

<--------------------------------------------------------------------------->

  <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="mybatisTest.dao.TeaDao">
        <resultMap id="teacher" type="mybatisTest.pojo.Teacher">
            <result property="teaId" column="tea_id"/>
            <result property="teaName" column="tea_name"/>
            <result property="gender" column="gender"/>
            <collection property="students" ofType="mybatisTest.pojo.Student">
                <id property="stuId" column="stu_id"/>
                <result property="stuName" column="stu_name"/>
                <result property="age" column="stu_age"/>
            </collection>
        </resultMap>
        <select id="queryTea" resultMap="teacher">
            SELECT t.*,s.*
            from teacher t,student s,stu_tea st
            WHERE st.tea_id=t.tea_id
            and s.stu_id=st.stu_id
        </select>
    </mapper>

测试

Student{stuId=1, stuName='张三', age=15, teachers=[Teacher{teaId=1, teaName='赵六老师', gender='男', students=null}, Teacher{teaId=2, teaName='钱七老师', gender='男', students=null}, Teacher{teaId=3, teaName='二三老师', gender='女', students=null}]}
Student{stuId=2, stuName='李四', age=16, teachers=[Teacher{teaId=2, teaName='钱七老师', gender='男', students=null}, Teacher{teaId=3, teaName='二三老师', gender='女', students=null}]}
Student{stuId=3, stuName='王武', age=17, teachers=[Teacher{teaId=1, teaName='赵六老师', gender='男', students=null}, Teacher{teaId=3, teaName='二三老师', gender='女', students=null}]}

<----------------------------------------------------------------------------------------->

Teacher{teaId=1, teaName='赵六老师', gender='男', students=[Student{stuId=1, stuName='张三', age=15, teachers=null}, Student{stuId=3, stuName='王武', age=17, teachers=null}]}
Teacher{teaId=2, teaName='钱七老师', gender='男', students=[Student{stuId=1, stuName='张三', age=15, teachers=null}, Student{stuId=2, stuName='李四', age=16, teachers=null}]}
Teacher{teaId=3, teaName='二三老师', gender='女', students=[Student{stuId=3, stuName='王武', age=17, teachers=null}, Student{stuId=2, stuName='李四', age=16, teachers=null}, Student{stuId=1, stuName='张三', age=15, teachers=null}]}

6.扩展思考:
在多对多的设计中,关系表好像一般都没有实体类,但如果我要修改多对多之间的关系怎么修改?
注:本人初学java者,如有不对敬请指出,谢谢!
7.参考文献
CSDN、百度百科
8.更多讨论
7.参考文献
CSDN、百度百科
8 更多讨论
总结:
1))什么是实体表?
实体表就是对应实际的对象的表,比如:学生表,老师表
2)什么是关系表?
关系表是表示表与表之间的数据关系,我的理解是:关系表设计一般只存在多对多。
3)怎么设计表,多对多怎么在实际代码中表示?
设计表:一对一和一对多在表中多加一个关联字段,多对多多设计一个关联表

代码中实体类的编写:一对一在实体类中多加一个属性,一对多在实体类中多加一个集合属性,多对多就是在两个实体类中各加一个集合属性

温馨提示:本人初学java者,如有不对敬请指出,谢谢!

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~ http://www.jnshu.com/login/1/28836439

视频:https://pan.baidu.com/s/1oxi95RhZmUTARhKQwjXUGA

PPT链接 视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/84473586