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

数据库设计(一对一,一对多,多对多)关联查询 ※表与表之间的关系 1、一对一 需要两个表。当然做项目时为了省空间,通常只建一个表,如果要实现一对一的查询,可以建两个视图。示例如下: 1)建物理表,初始化数据 CREATE TABLE person( id INT, NAME VARCHAR(10), sex CHAR(1), wife INT, husband INT ); INSERT INTO person 阅读详情

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

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

【什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
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 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 getStudents() {
return students;
}

public void setStudents(List 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 queryStu();
}
package mybatisTest.dao;
。
import mybatisTest.pojo.Teacher;

import java.util.List;

public interface TeaDao {
List queryTea();
}
xml文件

<?xml version="1.0" encoding="UTF-8"?> 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 <---------------------------------------------------------------------------> <?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.参考文献
优快云、百度百科
8.更多讨论
7.参考文献
优快云、百度百科
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

避开这5个坑!Tushare金融数据获取与分析的常见错误排查指南 本文详细解析了使用Tushare进行金融数据获取与分析时常见的5个问题,包括Token失效、数据缺失、频率限制、数据一致性和性能瓶颈,并提供了实用的解决方案和优化策略。通过Python代码示例和最佳实践,帮助金融数据分析师和量化开发者高效避开这些陷阱,提升工作效率。 阅读详情

相关推荐

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

Mybatis中关联表需要创建实体对象吗?

1、比如在用户角色权限结构中,关联表只是存储关联关系,那么这种情况下是不需要创建实体类的,业务操作可以交给Java代码来做或者直接跨表操作。 2、如果关联表中还存储有一些状态数据或者是资源数据,那么就需要创建实体类了。 一切以实际业务为准,怎么方便怎么来! ...

京北游戏官方 1万+

ROS2与Gazebo协同实现多机器人避障仿真

本文详细介绍了如何利用ROS2与Gazebo协同搭建多机器人避障仿真环境。通过创建SDF机器人模型、编写多机器人启动文件以及集成基础避障算法,构建了一个低成本、高效率的虚拟测试平台,为AGV编队、机器人集群等项目的算法验证与迭代提供了完整解决方案。

weixin_29065659的博客 295

关联(Association)是数据库设计中的一个重要概念,它描述了实体之间的逻辑关系

例如,如果有一个用户表和一个订单表,那么可以在订单表中添加一个名为“user_id”的列作为外键,这个外键指向用户表的主键“id”。一对一关系:在这种关系中,一个实体中的某一项数据可以与另一个实体中的某一项数据相关联,但反之亦然。这是通过在表示这种关系的数据表中包含一个外键来完成的,该外键指向主表中的主键。例如,假设你有两个实体,“学生”和“课程”,它们之间存在多对多的关系,通过一个名为“学生课程”的联接表来维护。,它们之间存在多对多的关联关系,即一个学生可以选修多门课程,而一门课程也可以被多个学生选修。

[Blog][Domain] programb.blog.youkuaiyun.com 1379

集成学习综述—bagging/随机森林/adaboost/GBDT/XGBoost/LightGBM/catboost 原理和代码介绍

集成学习介绍 文章目录集成学习介绍1 基本概念1.1 定义基本定义集成学习类别参考链接1.2 基学习器(CART)介绍公式介绍例子讲解代码实践参考链接1.3 偏差(bias)和方差(var)公式推导图解参考链接2 Boosting类2.1 原理2.2 AdaBoost2.2.2 公式推导2.2.3 优点与不足优点不足应用2.2.4 代码实践2.2.5 参考链接2.3 GBDT原理介绍代码实践参考...

fzl的博客 4616

点云生成图像

摘要:本文介绍了使用Open3D库将点云投影为RGBD图像的方法。通过project_to_rgbd_image函数,利用小孔相机模型的内参和外参矩阵,实现了点云到彩色图像和深度图的转换。实验使用随机生成的10万个点云数据,通过可视化窗口获取相机参数后,成功生成了对应的RGB图像和深度图像,并使用Matplotlib进行可视化展示。该方法为点云数据处理提供了有效的三维到二维投影方案。

夜空中明亮的星的专栏 134

数据库表设计(一对多,多对多)

做一个项目,必然是少不了数据库设计的!在学习阶段,基本都是单表。然而在实际开发过程中,一对多,多对多的表处处都是!简单整理一下,一对多,多对多表如何设计整理一下思路: 数据库实体间有三种对应关系:一对一,一对多,多对多。 一对一关系示例: 一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。 ...

weixin_30955341的博客 2307

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

什么是数据库中的一对多关系?

但是,如果您忘记了存储所有信息的表,并想象实际上有不同的表,每个表都代表层次结构中的一个级别,则可视化起来会更容易一些。实际上,该设计允许客户拥有零订单(即尚未进行第一次购买的新客户),一个订单(已进行单次购买的相对较新的客户)或多个订单(频繁的客户)。对于这些方案,通常最好使用自然键,这些自然键是唯一值,是所存储实体的一部分,而不是由我们的数据库自动生成的。您会注意到,它不包括与下订单的客户相关的任何数据,也没有关于订购的产品或服务的任何信息。代理主键的使用是一种被广泛接受的表建模方式。

allway2的博客 8200

【AI黑话日日新】什么是对比学习?

模型效果高度依赖大规模、高质量的人工标注数据。数据标注不仅成本高昂、周期漫长,在医疗、工业、小众垂类等场景中,甚至难以获取足量的标注样本,严重限制了模型的泛化能力与应用边界。自监督学习的出现,为解决这一问题提供了全新思路——无需人工标注标签,而是利用数据自身的结构与内在关联,构建自生成的监督信号完成模型预训练,再通过微调适配下游任务。在众多自监督学习方法中,对比学习(Contrastive Learning)

专注:太空算力、AI infra、异构调度、大模型成本工程 730

塔石DTU通过MQTT传递数据教程

塔石通过MQTT通讯上传ADL400电表用电量。

renkai721的专栏 253

SQL的一对多,一对一,多对多什么意思?

SQL的一对多,一对一,多对多什么意思?

qq_52178957的博客 2209

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java一对多实体类怎么写_什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?...

这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能,本篇分享的是:【什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?1 背景介绍】大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务二里面的知识点:什么是实体...

weixin_39563823的博客 1970

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

eclipse 搭建 mybatis 多表查询(三)

绪论 本章接上章,本章主要讲述mybatis多表查询,用于练习一对多,多对多的复杂关系查询。 在mybatis多表查询中,一对多通过增加附加属性来实现,多对多通过在附加集合属性来存放多条数据。 目的:在三张实体表,一张关系表中查询学生的信息和其所在的班级以及所选的全部课程 一、准备 1.1 数据库建表 建了四张表: person(学生) class(班级) course(课程) per_cout_relation(学生课程主键联系表) 1.2 目录 二、 分层 2.1 model 实体类 完善代码

Mr_Newbie的博客 1048

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据库表设计:一对一、一对多、多对多

天气:阴 地点:图书馆 人物:小伙伴们与我 事件:不宅家,在图书馆睡觉、读书、写字.... 收获:生活是积极向上的,很美好的一天,因为是我的破蛋日,祝我生日快乐????~~~~加油,越来越好、越来越明亮~~☀️ 数据库实体表间有三种对应关系:一对一、一对多、多对多。 一、设计总结 1、设计E-R图(先画出实体,再画实体间的联系) 2、根据E-R图设计表和表结构(具体根据表关系进行设计) 二、各个表关系示例设计 1、一对一 示例:每个人都有唯一的年龄和姓名 user用户表 id

qq_26409411的博客 1万+

MySQL表设计思路(一对多、多对多...)

一对多,两张表,多的表加外键多对多,三张表,关系表加外键命名规范,表名以t_或者tbl_开头,增加可读性,字段采用下划线命名,避免用保留字,如select、desc主键索引名为pk_字段名,唯一索引名为uk_字段名,普通索引名为idx_字段名数据类型选择时,金额类不能选择float、double,选decimal,防止精度丢失主键的设计最好设业务主键,最好是一串无意义且不重复的数字,可采用UUID或者Auto_increment自增。

llg___的博客 7334

数据库实体间三种对应关系:一对一,一对多,多对多

数据库实体间有三种对应关系:一对一,一对多,多对多。一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。 一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生。 多对多关系示例:一个学生可以选择多门课,一门课也有多名学生。这三种关系在数据库中逻辑结构处理分析:1.一对多关系处理: 我们以学生和班级之间的关系来说明一对多的关系处理方法。 假设现有基本表学生表(

空白_回忆的博客 2万+

数据库设计(一对一、一对多、多对多)

关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。 数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。 一对一外键关联,图示如下: 一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系。图示如下:   关联映射:一对多 我们以学生和班级之间的关系来说明一对多的关系处理方法。 假设现...

皮一下很开心的猴头 2万+
上一篇: 什么是压测,为什么要进行压力测试?JMETER工具的使用
下一篇: shrio框架
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值