MySQL-多表设计-一对一&多对多

这篇具有很好参考价值的文章主要介绍了MySQL-多表设计-一对一&多对多。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一对一

  • 案例:用户 与身份证信息 的关系
  • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其它字段放在另一张表中,以提高操作效率
  • 实现:在任意一方加入外键,关联另一方的主键,并且设计外键为唯一的(unique)
  • 具体代码及运行结果如下:
  • create table tb_user(
        id int unsigned  primary key auto_increment comment 'ID',
        name varchar(10) not null comment '姓名',
        gender tinyint unsigned not null comment '性别, 1 男  2 女',
        phone char(11) comment '手机号',
        degree varchar(10) comment '学历'
    ) comment '用户信息表';
    
    insert into tb_user values (1,'白眉鹰王',1,'18812340001','初中'),
                            (2,'青翼蝠王',1,'18812340002','大专'),
                            (3,'金毛狮王',1,'18812340003','初中'),
                            (4,'紫衫龙王',2,'18812340004','硕士');
    
    
    create table tb_user_card(
        id int unsigned  primary key auto_increment comment 'ID',
        nationality varchar(10) not null comment '民族',
        birthday date not null comment '生日',
        idcard char(18) not null comment '身份证号',
        issued varchar(20) not null comment '签发机关',
        expire_begin date not null comment '有效期限-开始',
        expire_end date comment '有效期限-结束',
        user_id int unsigned not null unique comment '用户ID',
        constraint fk_user_id foreign key (user_id) references tb_user(id)
    ) comment '用户信息表';
    
    insert into tb_user_card values (1,'汉','1960-11-06','100000100000100001','朝阳区公安局','2000-06-10',null,1),
            (2,'汉','1971-11-06','100000100000100002','静安区公安局','2005-06-10','2025-06-10',2),
            (3,'汉','1963-11-06','100000100000100003','昌平区公安局','2006-06-10',null,3),
            (4,'回','1980-11-06','100000100000100004','海淀区公安局','2008-06-10','2028-06-10',4);
  • MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库
     

  • MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库

  • 上述的两个表中的信息都是对于用户信息的描述,但是将用户的基本信息独立为一张表,并且同剩余信息建立了一对一的联系。

多对多

  • 案例:学生 与 课程的关系
  • 关系:一个学生可以选修多个课程,一门课程也可以供多个学生选择
  • 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方外键
  • 具体代码及运行结果如下:
  • create table tb_student(
        id int auto_increment primary key comment '主键ID',
        name varchar(10) comment '姓名',
        no varchar(10) comment '学号'
    ) comment '学生表';
    insert into tb_student(name, no) values ('黛绮丝', '2000100101'),('谢逊', '2000100102'),('殷天正', '2000100103'),('韦一笑', '2000100104');
    
    
    create table tb_course(
       id int auto_increment primary key comment '主键ID',
       name varchar(10) comment '课程名称'
    ) comment '课程表';
    insert into tb_course (name) values ('Java'), ('PHP'), ('MySQL') , ('Hadoop');
    
    
    create table tb_student_course(
       id int auto_increment comment '主键' primary key,
       student_id int not null comment '学生ID',
       course_id  int not null comment '课程ID',
       constraint fk_courseid foreign key (course_id) references tb_course (id),
       constraint fk_studentid foreign key (student_id) references tb_student (id)
    )comment '学生课程中间表';
    
    insert into tb_student_course(student_id, course_id) values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);
  • MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库

  • MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库

  • MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库
     

  • 三个表之间的关系如下

    MySQL-多表设计-一对一&多对多,Java Web学习跟踪笔记,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-594200.html

     

到了这里,关于MySQL-多表设计-一对一&多对多的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 杨中科 .NETCORE EFCORE第七部分 一对一,多对多

    1、builder.HasOne(o =o.Delivery).WithOne(d=d.Order).HasForeignKey(d=dOrderId); 2、测试插入和获取数据 示例 新建 Order 新建 Delivery DeliveryConfig OrderConfig 执行 迁移命令 查看数据库 测试数据插入 运行查看数据 1、多对多:老师一学生 2、EF Core 5.0开始,才正式支持多对多 3、需要中间表,举例数据

    2024年01月17日
    浏览(42)
  • Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 Django数据表关

    2024年02月12日
    浏览(58)
  • websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

    基本介绍 WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC 包含的这些标准使用户在无需安装任何插件或者第

    2024年04月28日
    浏览(46)
  • MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询

    MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 com.github.dreamyoung mprelation 0.0.3.2-RELEASE 注解工具使用优缺点: 优点: 使用简单,通过在实体类上添加@OneToOne / @OneToMany / @ManyToOne / @ManyToM

    2024年01月20日
    浏览(49)
  • [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备  项目目录  一对一查询(多对一) 方式一:(xml文件映射) 查询结果:  方式二:(注解映射)  一对多查询(一对多) 方式一:(xml文件映射)  方式二:(注解映射) 既然数据库是存储项目中的数据的,项目中的

    2023年04月10日
    浏览(50)
  • MySQL表设计思路(一对多、多对多...)

    要开始单独负责需求了,捋一捋表设计的思路。 字符串类型 varchar:即variable char ,可边长度的字符串,会根据实际数据的长度动态分配空间,以节省空间,如varchar(10)存jack,则只给4字节 char:定长字符串,最大255 字符 。不论实际数据长度都以定长空间存储,使用不当容易浪

    2024年02月07日
    浏览(36)
  • java使用WebSocket实现一对一实时对话

    最近的项目中有实时对话的需求。这里也是查阅了很多的资料。使用webSocket实现一对一对话是最多的。 链接: https://pan.baidu.com/s/1Vn1e1qw7nRnU1_4R-4fcGg 提取码: qwer  逻辑讲解: 现在我们要给张三丰发一个你好,我们要解决下面两个问题 ·  这个你好怎么展示在我的窗口 ·   这个

    2023年04月09日
    浏览(46)
  • Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型

    我们如何把Mysql的模型合理的在ES中去实现? 就需要你对要存储的数据足够的了解,及对应用场景足够的深入分析,才能建立一个合适的模型,便于你后期扩展 实体之间的关系: 一对一 模型 一对一(1:1):一个实体最多只能能另一个实体相关联,另一个实体如是。 例:一个只能

    2024年02月10日
    浏览(55)
  • [Django-04]一对一,一对多

    OneToOneField(),ForeignKey() 的参数如下 to 要连接的模型 to_field 要被关联的目标Model的字段 on_delete 删除主表(被关联的表,也就是非OneToOneField,ForeignKey的表)时,当前表怎么处理。 CASCADE-联动删除 PROTECT -抛出异常 SET_NULL-设为null SET_DEFAULT-设为预定义的默认值 SET-设置为指定的值

    2024年02月04日
    浏览(48)
  • [Mybatis的一对一和一对多]

    目录  🎂前言:  🎂一对一关联查询:  🎂一对多关联查询:  🎂 下面是上面代码中所涉及到的实体类结构设计:  🎂一对一关联查询:  🎂用户实体类(User):  🎂用户详情实体类(UserDetail):  🎂一对多关联查询:  🎂订单实体类(Order):  🎂订单详情实体类

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包