什麼是實體表,什麼是關係表,一對多和多對多應該怎麼設計表?

這裏是修真院後端小課堂,每篇分享文從java

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】程序員

八個方面深度解析後端知識/技能,本篇分享的是:數據庫

【什麼是實體表,什麼是關係表,一對多和多對多應該怎麼設計表?
1 背景介紹】後端

你們好,我是IT修真院深圳分院第十三期學員,一枚正直純潔善良的JAVA程序員。 今天給你們分享一下,修真院官網JAVA任務二里面的知識點:
什麼是實體表,什麼是關係表,一對多和多對多應該怎麼設計表?
1 背景介紹
在任務三設計數據庫的時候,須要理清表與表數據之間的關係,這時候就須要知道什麼是實體表和關係表。而後根據他們之間的關係設計表mybatis

2.知識剖析
2.1什麼是實體表
實體表就是對應實際的對象的表,好比:學生表,老師表
2.2什麼是一對1、一對多和多對多?
1.一對1、一對多和多對多都是指數據表與表中的數據關係,不是表與表之間的關係app

2.一對一:一個班主任只屬於一個班級,一個班級也只能有一個班主任ide

3.一對多:一個顧客對應多個訂單,而一個訂單隻能對應一個客戶測試

4.多對多:一個學生有多個老師,一個老師有多個學生this

2.3什麼是關係表
關係表是表示表與表之間的數據關係,個人理解是:關係表設計通常只存在多對多。編碼

3.常見問題

1)什麼是實體表?

2)什麼是關係表?

3)怎麼設計表,多對多怎麼在實際代碼中表示?

4.解決方案:
設計表:一對一和一對多在表中多加一個關聯字段,多對多多設計一個關聯表
代碼中實體類的編寫:一對一在實體類中多加一個屬性,一對多在實體類中多加一個集合屬性,多對多就是在兩個實體類中各加一個集合屬性

5.編碼實戰
學生表

clipboard.png

老師表

clipboard.png

關係表

clipboard.png

學生實體類

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者,若有不對敬請指出,謝謝!
PPT連接 視頻連接
相關文章
相關標籤/搜索