這裏是修真院後端小課堂,每篇分享文從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.編碼實戰
學生表
老師表
關係表
學生實體類
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連接 視頻連接