纵表和横表的概念及其相互转换
2016-02-16 17:09
429 查看
横表就是普通的建表方式,如表结构为:主键、字段1、字段2、字段3...。 如果变成纵表后,则表结构为: 主键、字段代码、字段值。而字段代码则为字段1、字段2、字段3...。 具体为电信行业的例子。以用户帐单表为例,一般出账时用户有很多费用,其数据一般存储为:时间,客户ID,费用科目,费用。这种存储结构一般称为纵表,其特点是行数多,字段少。纵表在使用时由于行数多,统计用户数或对用户进行分档时还需要进行GROUP BY 操作,性能低,且操作不便,为了提高性能,通常根据需要将纵表进行汇总,形成横表,比如:时间、客户ID、基本通话费、漫游通话费、国内长途费、国际长途费...。
横表
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
纵表
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。
结论
应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
![](http://img.blog.csdn.net/20160216165241437?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将其转为横表:
![](http://img.blog.csdn.net/20160216162902301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20160216163054049?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将其转为纵表:
结果:
横表
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
纵表
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。
结论
应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
纵表转横标
有如下纵表:将其转为横表:
select s.student_name, sum(case s.subject when '语文' then s.score end) as 语文, sum(case s.subject when '数学' then s.score end) as 数学, sum(case s.subject when '英语' then s.score end) as 英语 from score_vertical s group by s.student_name结果:
横表转纵表
有如下横表:将其转为纵表:
select s.student_name, '语文' as 科目, s.语文 as 成绩 from score_horizontal s union all select s.student_name, '数学' as 科目, s.数学 as 成绩 from score_horizontal s union all select s.student_name, '英语' as 科目, s.英语 as 成绩 from score_horizontal s order by student_name, 科目
结果:
相关文章推荐
- InnovEDA PowerPCB/BGA Suite 4.0.1 + InnovEDA Visual HDL V6.7.8 for Verlog
- 怎样让pl sql developer 界面视图复位
- debian服务器上不了网,缺少默认网关
- Overview of Flashback Technology
- linux下 SCP 、ssh、ssh-copy-id采用非默认端口传输
- vim ctags omnicppcomplete 无法自动提示成员变量,总是提示“找不到模式”的解决方法
- php将一个数值切成N份
- RHCE 学习笔记(23) - 磁盘格式化和分区
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- 钣金CAD/CAM系统 Cnckad v10.066 全能破解版 1CD
- 转载 loadrunner的一些问题解决
- 下载、运行docker
- 《转载》IOS高级开发~开机启动&无限后台运行&监听进程
- Android 之 selector
- 生成Area URL链接
- java 的io 和nio的简单读写
- Android 开发系列(4) - JNIEnv::FindClass 的问题
- POJ 2686_Traveling by Stagecoach【状态压缩DP】
- android studio 碰到问题
- POJ 2686_Traveling by Stagecoach【状态压缩DP】