MySQL-多表设计-一对多

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

多表的设计-概述

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

一对多

  • 需求
    • 根据页面原型及需求文档,完成部门(1:父表)员工(n:子表)模块的表结构设计
    • MySQL-多表设计-一对多,Java Web学习跟踪笔记,mysql,数据库
       
    • 由于部门与员工的对应关系为一对多,所以在创建员工表时,设置一个属性指定当前员工属于哪一个部门
    • 具体代码如下
    • -- 创建员工表
      create table tb_emp
      (
          id          int unsigned primary key auto_increment comment '主键ID',
          username    varchar(20)                  not null comment '用户名',
          password    varchar(32) default '123456' null comment '密码',
          name        varchar(10)                  not null comment '姓名',
          gender      tinyint unsigned             not null comment '性别, 1 男, 2 女',
          image       varchar(300)                 null comment '图像url',
          job         tinyint unsigned             null comment '职位, 1 班主任 , 2 讲师 , 3 学工主管, 4 教研主管',
          entrydate   date                         null comment '入职日期',
          dept_id     int unsigned comment '归属部门的部门ID',
          create_time datetime                     not null comment '创建时间',
          update_time datetime                     not null comment '修改时间'
      ) comment '员工表';
      -- 创建部门
      create table tb_dept
      (
          id          int primary key auto_increment comment '部门ID',
          name        varchar(10) not null unique comment '部门名称',
          create_time datetime    not null comment '创建时间',
          update_time datetime    not null comment '更新时间'
      
      )
    • 由上述代码可知在员工表与部门表通过部门ID联系起来

    • 一对多关系的实现:只需要在多的一方,添加字段及员工模块的表结构设计

外键

物理外键
  • 概念
    • 使用 foreign key 定义外键关联另一张表
  • 缺点
    • 影响增删改查的效率
    • 仅用于节点数据库,不适用于分布式、集群的场景
    • 容易引发数据库的死锁问题,消耗性能
逻辑外键(推荐使用
  • 概念
    • 在业务逻辑层中,解决外键联系
    • 通过逻辑外键可以解决上述问题
  • 多表问题的分析
  • 在上述创建的tb_emp和tb_dept数据表中插入如下数据
  • 具体代码及运行结果如下:
    • insert into tb_dept (id, name, create_time, update_time) values
              (1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()),
              (4,'就业部',now(),now()),(5,'人事部',now(),now());
      
      INSERT INTO tb_emp
      	(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES
      	(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
      	(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
      	(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
      	(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
      	(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
      	(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
      	(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
      	(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
      	(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
      	(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
      	(11,'luzhangke','123456','鹿杖客',1,'11.jpg',1,'2007-02-01',1,now(),now()),
      	(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',1,'2008-08-18',1,now(),now()),
      	(13,'fangdongbai','123456','方东白',1,'13.jpg',2,'2012-11-01',2,now(),now()),
      	(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
      	(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
      	(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),
      	(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());
      
    • MySQL-多表设计-一对多,Java Web学习跟踪笔记,mysql,数据库

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

    • 现象
      • 部门数据可以直接删除,然而删除之前的员工仍然显示归属于该被删除的部门,此时出现了数据的不完整和不一致的问题

    • 问题分析
      • 上述两张表,在数据库层面,并未建立联系(逻辑层面已经建立了联系),所以无法保障数据的一致性和完整性
  • 外键约束
    • 外键语法
      • 创建表时指定
        • CREATE TABLE 表名
          (
              字段名 数据类型,
              .....
              [constraint] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (字段名)
          );
      • 创建完表之后,添加外键
        • ALTER TABLE 表名
              ADD CONSTRAINT 外键名称
                  FOREIGN KEY (列外键字段名) REFERENCES 主表 (关联字段名);
      • 在IDEA中对数据库中的操作主要使用图形化界面

      • 具体操作如下:

      • 右击需要添加外键的数据表选择新建-->外键,就会加入如下界面(具体页面会由于idea的版本的不同而有所差异)

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

      •  外键创建好之后不能直接删除关联了外键的数据文章来源地址https://www.toymoban.com/news/detail-582324.html

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

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

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

相关文章

  • MySQL笔记-多表查询

    本文标签 : 多表查询  事务四大特性  并发事务问题  事务隔离级别 文章目录 目录 文章目录 一、多表查询 1.多表关系 2.多表查询概念  3.多表查询的分类  4.内连接  5.外连接 6.自连接  7.联合查询  8.子查询   1.标量子查询 2.列子查询 3.行子查询 4.表子查询  9.多表查询案

    2024年02月04日
    浏览(35)
  • 【MySQL】多表关系的基本学习

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 多表关系含义: 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,并设计表结构,由于业务之间相互关联,

    2024年02月21日
    浏览(21)
  • 鲜花商城系统设计与实现(Java+Web+MySQL)

    目 录 摘 要 I Abstract II 1 绪论 1 1.1 现状分析 1 1.2 研究意义 1 1.3 研究方法 1 2 系统的开发环境及技术简介 3 2.1 系统开发环境简介 3 2.2 系统开发技术简介 3 3 可行性研究 7 3.1 经济可行性 7 3.2 技术可行性 7 3.3 操作可行性 7 3.4 法律可行性 7 4 需求分析 9 4.1 数据描述 9 4.1.1 数据流图

    2024年02月03日
    浏览(25)
  • 15天学习MySQL计划(多表联查)第四天

    1.1概述 ​ 指从多张表中查询数据 ​ 在项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一):在多的一方设置外键,关

    2023年04月23日
    浏览(72)
  • 【Java Web学习笔记】5 - XML

    https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 目录 项目代码 零、在线文档 一、XML引出 1.为什么需要XML 2.XML用于解决什么问题  3.案例 二、XML基本语法 1.基本语法 2.XML语法 - 文档说明 3.XML语法 - 元素 4.XML语法 - 属性 5.XML语法 - CDATA节 三、XML转义字符 小结 四、DOM4J 1.XML解

    2024年02月04日
    浏览(27)
  • 【MySQL】学习多表查询和笛卡尔积

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 指的是从多张表中查询数据 首先准备好需要查询的数据表 - dept表 和 emp表 笛卡尔积:笛卡尔乘积是指在数学中,两个集合 A 集合和 B集合的所

    2024年02月19日
    浏览(27)
  • 网上商城购物系统设计与实现(Java+Web+SSM+MySQL)

    目 录 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 开发工具及技术 1 2 需求分析 3 2.1 功能需求分析 3 2.1.1 网站前台功能 3 2.1.2 网站后台功能 3 2.2 性能分析 3 2.3 系统用户用例图 4 3 系统设计 5 3.1 系统的总体设计 5 3.2 数据库的分析与设计 5 3.2.1数据库概念设计 6 3.2.2数据库物理结

    2024年02月03日
    浏览(31)
  • web开发学习笔记(8.java web后端开发基础知识)

    1.使用spring开发的优势,spring发展到今天已经形成了一种开发生态圈,提供了若干个子项目,每个项目用于完成特定的功能。使用spring全家桶,可以做到很多事情,可以很方便的套用很多的组件。 2.pom构成 指定父工程 指定web构件 指定springboot打包控件 3.启动类的写法 4.contro

    2024年01月18日
    浏览(51)
  • 【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

    「前言」文章内容大致是对MySQL复合查询的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 前面篇章讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够,下面将讲解复合查询,首先回顾一下基本的查询。 使用的数据库是之前篇章的雇

    2024年02月11日
    浏览(38)
  • Java基于Andriod平台的手机Web地图服务设计(源码+mysql+文档)

    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考 选题背景: 随着移动互联网的快速发展,智能手机已经成为人们生活中不可或缺的一部分。而地图服务作为智能手机的重要功能之一,为用户提供了方便快捷的定位、导航和搜索服务。然而,传统的桌

    2024年01月25日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包