当前位置: 首页 > news >正文

MySql 多表设计

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

一对多

CREATE TABLE tb_dept (id int UNSIGNED 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 '修改时间') COMMENT '部门表';
CREATE TABLE `tb_emp` (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',`username` varchar(20) NOT NULL COMMENT '用户名',`password` varchar(23) DEFAULT NULL COMMENT '密码',`name` varchar(10) DEFAULT NULL COMMENT '姓名',`gender` tinyint DEFAULT NULL COMMENT '性别:1男,2女',`image` varchar(300) DEFAULT NULL COMMENT '图像url',`job` tinyint DEFAULT NULL COMMENT '职位:1班主任,2讲师,3学工主管,4教研主管',`entrydate` datetime DEFAULT NULL COMMENT '入职日期',`dept_id` int COMMENT '归属部门id',`creat_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)
) COMMENT='员工表' ;

多表问题:上述两张表在数据库层面并未建立关联,所以是无法保证数据的一致性和完整性的。

外键约束

-- 创建表时指定
create table 表名 (字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表(字段名)
);-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(字段名);

使用foreign key定义外键关联另外一张表的缺点有:

  • 影响增删改查的效率(需要检查外键关系)。
  • 仅用于单节点数据库,不适用于分布式、集群场景。
  • 容易引发数据库的死锁问题,消耗性能。

逻辑外键:在业务层逻辑中,解决外键关联。通过逻辑外键,可以很方便的解决上述问题。

一对一

一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中以提高效率。典型案例:用户与身份证信息的关系。

多对多

一个学生可以选修多门课程,一个课程也可以供多个学校选择。

实现:建立第三张表,中间表至少包含两个外键,分别关联两方主键。

http://www.lryc.cn/news/456171.html

相关文章:

  • wpf实现新用户页面引导
  • 【小白向】机器人入门之ROS系统的学习(Ubuntu24.04+ROS2)
  • SNAP-MS策略:可溶性水凝胶微珠,高效表征蛋白质复合物
  • java对象序列化Serializable的应用场景
  • springboot-网站开发-linux服务器部署jar格式图片存档路径问题
  • 面试--java基础
  • NLP自然语言处理
  • web自动化测试基础(从配置环境到自动化实现登录测试用例的执行,vscode如何导入自己的python包)
  • 鸿蒙 Next 实战: 电子木鱼
  • SQLite SQL调优指南及高级SQL技巧
  • WordPress 6.7即将发布的新功能(和截图)
  • SpringBoot整合QQ邮箱
  • 低质量数据的多模态融合方法
  • 计算机毕业设计 基于Django的在线考试系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • Shell脚本linux登录自动检查
  • Golang | Leetcode Golang题解之第450题删除二叉搜索树的节点
  • Linux 之 Linux应用编程概念、文件IO、标准IO
  • PDF处理技巧:Windows电脑如何选择合适的 PDF 编辑器
  • 【c++】初步了解类和对象2
  • Python库pandas之四
  • 网络攻防技术--第三次作业
  • 带隙基准Bandgap电路学习(一)
  • [前端][easyui]easyui select 默认值
  • 项目开发--大模型--个人问答知识库--chain控制
  • STM32—SPI通讯协议
  • Android 安装过程五 MSG_INSTALL消息的处理 安装
  • 大数据开发--1.3 Linux的常用命令大全
  • 使用PuTTY连接到Amazon Linux实例
  • Nexus搭建maven私有仓库
  • 留存率的定义与SQL实现