Mysql中横表与纵表详细解析及应用举例,看完就会用!

横、纵表

定义

横表定义:一个对象的所有属性在一行,列的定义是对象的各个字段

举例:学生成绩表 姓名 Java C语言

​ 张三 100 88

纵表定义:一个对象的所有属性被分配到多行,列的定义是对象的字段和字段的值

举例:学生成绩表 姓名 科目 成绩

​ 张三 Java 100

​ 张三 C语言 88

若采用纵表,为了规范,我们还需保存一张科目表

​ 科目表 名称 描述

​ Java Java

​ C语言 xx

优缺点

横表:

​ 优点:

  1. 查询性能较好:由于所需数据都在同一个表中,查询时只需扫描较少的表,减少了表连接的操作,提高了查询性能。

  2. 理解难度低:横表的设计更符合日常思维,易于理解和维护。

  3. 所占存储空间小:由于一个对象的所有属性都在一行,因此没有冗余数据,所占内存也小。

    缺点:

  4. 数据组织难度高:如果表中的数据结构比较复杂,或者需要经常修改表结构,那么维护和管理起来就比较困难。

  5. 扩展性有限:如果要增加新的数据类型或字段,可能需要在现有表中增加新的列,这可能会影响到现有的查询和数据结构。

纵表:

​ 优点:

​ 1.扩展性高:如果要新增新的数据类型或字段,不需要在加新的列,而是当做值加进去,不用改表结构。

​ 缺点:

​ 1.所占存储空间大:由于一个对象的属性被分到多个行中,以及可能需要新表来记录某些属性,因此容易产生数据冗余,占更多的存储空间。

​ 2.理解难度大

​ 3.查询性能较差:若将一个横表设计成纵表,很可能需要新的表,需要连表查询,降低查询性能。

使用场景

一般情况下,我们使用横表即可满足需求,但如果出现一个表中字段后期需要添加新列,需要扩展的情况,并且内存和性能允许的情况下,建议使用纵表。

应用实践

场景:某教育机构有很多课程,某学生加入了这个教育机构学习课程,在后期学生学习过程中,可能报新的课程,并且该教育机构也可能新添新的课程,现在教育机构需要你将原来的学生教育信息表从横表改为纵表,以方便日后扩展。

原表:student_info

idstudent_idnameapply_javaapply_capply_englishapply_mathis_valid
11张三11101
22李四10101
33王五11011

改造后的表:student_info student_apply course_info

student_info

idstudent_idnameis_valid
11张三1
22李四1
33王五1

student_apply

idstudent_idcourse_idis_applyis_valid
11111
21211
31311
41401
52111
62201
72311
82401

course_info

idnamedesis_valid
1JAVA1
2C1
3英语1
4数学1

​ 如上所示,将原来的一张student_info表转化成纵表后拆成了三张表,student_info只记录学生信息,通过student_id作为外键与student_apply表相连,student_apply记录学生报课信息,通过course_id作为外键和course_info表相连。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter之Graphic图表的简单示例

简介 Graphic是一个数据可视化语法和Flutter图表库。 官方github示例 我的gitee示例 网上可用资源很少,只有作者的几篇文章,并且没有特别详细的文档,使用的话还是需要一定的时间去调研,在此简单记录。 示例 以折线图为例&…

分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 分布式定时任务系列5:XXL-job中blockingQueue的应用 …

我在electron中集成了自己的ai大模型

同学们可以私信我加入学习群! 正文开始 前言一、大模型选择二、获取key三、调用api四、调用ai模型api时,解决跨域总结 前言 最近单位把gpt、文心一言、通义千问、星火等等等等你能想到的ai大模型都给禁掉了,简直丧心病狂。 不知道有多少感同…

Kafka配置SASL认证密码登录

​​​​​​1、修改config/server.properties,添加如下内容 listenersSASL_PLAINTEXT://内网ip:9092 advertised.listenersSASL_PLAINTEXT://外网ip:9092 security.inter.broker.protocolSASL_PLAINTEXT sasl.mechanism.inter.broker.protocolPLAIN sasl.enabled.…

青云科技容器平台与星辰天合存储产品完成兼容性互认证

近日, 北京青云科技股份有限公司(以下简称:青云科技)的 KubeSphere 企业版容器平台成功完成了与 XSKY星辰天合的企业级分布式统一数据平台 V6(简称:XEDP)以及天合翔宇分布式存储系统 V6&#xf…

Golang并发模型:Goroutine 与 Channel 初探

文章目录 goroutinegoexit() channel缓冲closerangeselect goroutine goroutine 是 Go 语言中的一种轻量级线程(lightweight thread),由 Go 运行时环境管理。与传统的线程相比,goroutine 的创建和销毁的开销很小,可以…

ITSS信息技术标准——探索信息技术服务运行维护资质查询及其意义

开篇:随着信息技术的高速发展,企业对信息化设施的依赖程度日益加深,如何确保这些设施的正常运行,提高信息技术服务的质量,成为企业关注的焦点。于是,信息技术服务标准(ITSS)应运而生…

Android : 启动模式_简单应用

在 AndroidManifest.xml 文件中更改 android:launchMode" " standard、singleTask、singleTop、singleInstance、singleInstancePerTask standard 启动模式: 默认模式 android:launchMode"standard" a—>b ab; 跳转几个界面就要 点击 返回几次 才…

1457. 二叉树中的伪回文路径 --力扣 --JAVA

题目 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 解题思路 首先确…

部署系列六基于nndeploy的深度学习 图像降噪unet部署

文章目录 1.直接在源代码demo中修改2. 如何修改呢?3. 修改 graph4. 总结 https://github.com/DeployAI/nndeploy https://nndeploy-zh.readthedocs.io/zh/latest/introduction/index.html 通过以上2个官方链接对nndeploy基本的使用方法应该有所了解了。 下面就是利用…

uniapp链接WebSocket 常用的api

UniApp是一个基于Vue语法的跨平台应用开发框架,它支持使用WebSocket来实现实时双向通信。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它可以在客户端和服务器之间建立持久性的连接,并允许双向通信。在UniApp中,你可以使…

自动语音识别 支持86种语言 Dragon Professional 16 Crack

从个体从业者到全球组织,文档密集型行业的专业人士长期以来一直依靠 Dragon 语音识别来更快、更高效地创建高质量文档,减少管理开销,以便他们能够专注于客户。了解 Dragon Professional v16 如何通过单一解决方案提高标准,为各个业…

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线,类似于mapgis中的“用点连线”,线的每个拐点是可以自动捕捉到坐标点的,比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线,但是目前我还没接触到那里&a…

基于IDEA+SpringBoot+微服务开发的P2P平台项目

基于springboot的社区养老医疗综合服务平台 项目介绍💁🏻 项目名称:基于P2P的金融项目 一个基于P2P(点对点)模式的金融服务平台,致力于提供透明、高效、安全的金融服务。我们的目标是连接借款人与投资者&am…

Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?

你是否正在使用clion自带的vcpkg来安装了protobuf? 或者你是否自己使用visual studio自己编译了libprotobuf.lib? 你是否已经正确在CmakeLists.txt中添加了以下命令: find_package(Protobuf CONFIG REQUIRED) include_directories(${Protobu…

inBuilder低代码平台新特性推荐-第十期

各位知乎的友友们,大家好~ 今天来给大家带来的是inBuilder低代码平台特性推荐系列第十期——查看变更日志 场景介绍 【销售订单列表】中添加查看变更日志按钮,可以查看列表当前行数据的历史变更记录。 运行时效果 概念 系统中有些关键业务关键数据&am…

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型(主要特点是支持128k输入和知识库截止日期是2023年4月)时,发现不同商家提供的模型回复出现不一致的情况,尤其是模型均承认自己知识库达到2023年4月,但当我们细问时,Fak…

如何开发有趣而富有创意的营销小游戏

在数字化时代,企业通过创意而独特的方式与目标受众互动,已成为提高品牌知名度和用户参与度的重要手段之一。其中,设计一款引人入胜的营销小游戏,不仅能吸引用户的眼球,还能有效传达品牌信息。以下是一些建议&#xff0…

AI赋能数据表设计

数据表设计软件用过多种,用Ai 设计表几年Ai大模型爆发之后提升了新的高度 用navicat 设计表就是在跟团队的人介绍这次功能的表结构时,没办法看备注,只能看英文字段,导致在比较复杂的表中,总是在表结构和图形结构中来回…

转录组学习第5弹-比对参考基因组

比对参考基因组 在构建文库的过程中需要将DNA片段化,因此测序得到的序列只是基因组的部分序列。为了确定测序reads在基因组上的位置,需要将reads比对回参考基因组上,这个步骤叫做比对,即文献中所提到的alignment或mapping。包括基…