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

横、纵表

定义

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

举例:学生成绩表

姓名JavaC语言
张三10088

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

举例:学生成绩表

姓名科目成绩
张三Java100
张三C语言88

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

​科目表

名称描述
JavaJava
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表相连。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值