2021-06-15 数据库横表和纵表的区别

数据库建表有两种方式,横表和竖表。

我的理解就是 横表就是一个业务对象对应1条记录,比如学生有各科成绩,要设计成横表的话就是表设计就可以是 通过一条记录来存储学生的各科成绩,一般横表需要字段都是确定好的,要不然还需要修改表结构

横表示例:
uidChineseMathEnglish
aaa908090

纵表就是一个业务对象用多条记录来存储,将业务对象的字段属性拆开,用多条记录来存储的话 可拓展性会比较高.比如还想加其他学科只需要再添加一条记录即可.

纵表示例:
uidfiledNamefiledValue
aaaChinese80
aaaMath80
aaaEnglish90

横表是常用的,比较通用的建表方式。
但是有些场景用横表不太合适。
比如问卷调查,存储用户的回答,就不太方便使用横表。因为每一次问卷调查,题目数量都不相同。
又比如,配置选项,就不太适合横表,因为配置项随时都可能变化。
这个时候,就可以考虑使用竖表来存储。

优缺点

横表的优点:横标的有点事显示的较为清晰直观,同时在字段的选择上更为科学合理,具体的字段可以根据具体情况划分字段类型。

横表的缺点:不方便扩展和公用,也就是说设计了一张横标,只能在固定的某一种特定的相对不变的场景下使用,比如加字段,或者类似的业务想公用一张横表,都有局限。

竖表的优点:最大的特点是可以灵活扩展存储的内容,同时具有一定的公用性。因为竖表的存储结构不受字段个数的限制,可以存储具有一定共性的业务数据。

竖表的缺点:竖表的字段类型要兼容,比如横表可以根据具体的值设计成varchar,decimal,datetime等,横表为了兼容以上字段类型,只能设计成varchar的,可能会浪费一定的空间。

本文参考了https://www.cnblogs.com/jiqing9006/p/9908104.html

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
纵表横表是指将关系型数据库中的纵向存储的数据转换为横向存储的形式。在MySQL中,可以使用一些SQL语句和技巧来实现这个转换。 一种常见的方法是使用PIVOT(透视)操作来完成纵表横表的过程。在MySQL中,没有内置的PIVOT函数,但可以借助CASE WHEN语句和聚合函数来实现类似的功能。 下面是一个示例,假设有一个名为"employees"的表,其中包含了员工的姓名、部门和工资信息: ``` CREATE TABLE employees ( id INT, name VARCHAR(50), department VARCHAR(50), salary DECIMAL(10, 2) ); INSERT INTO employees (id, name, department, salary) VALUES (1, 'John', 'HR', 5000.00), (2, 'Jane', 'Marketing', 6000.00), (3, 'Mike', 'Sales', 7000.00), (4, 'Alice', 'HR', 5500.00); ``` 要将这个纵表转换为横表,以部门为列,员工姓名为行,工资为值,可以使用以下SQL查询: ``` SELECT name, MAX(CASE WHEN department = 'HR' THEN salary ELSE NULL END) AS HR, MAX(CASE WHEN department = 'Marketing' THEN salary ELSE NULL END) AS Marketing, MAX(CASE WHEN department = 'Sales' THEN salary ELSE NULL END) AS Sales FROM employees GROUP BY name; ``` 这个查询使用了CASE WHEN语句将每个部门的工资转换为对应的列,并使用了MAX函数来获取每个员工在不同部门的工资。GROUP BY子句按照员工姓名进行分组。 执行以上查询,将会得到如下结果: ``` +-------+---------+------------+-------+ | name | HR | Marketing | Sales | +-------+---------+------------+-------+ | Alice | 5500.00 | NULL | NULL | | Jane | NULL | 6000.00 | NULL | | John | 5000.00 | NULL | NULL | | Mike | NULL | NULL | 7000.00 | +-------+---------+------------+-------+ ``` 以上就是使用MySQL中的SQL语句实现纵表横表的方法之一。当然,根据具体的数据结构和需求,可能需要针对性地调整SQL语句来实现更复杂的转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值