SQL 行转列的一些思考
来源:互联网 发布:蒲公英淘客软件 编辑:程序博客网 时间:2024/06/10 11:37
对于关系型数据库来说,表的设计总是不能满足所有要求。满足了事务性就不能满足分析性。比如最常见的学生,课程和成绩的关系,这是一个矩阵的关系,学生是行,课程是列,成绩就填在他们交叉的地方:
语文数学尼玛10020铁锤10099一般我们设计关系型数据库的表会把这种关系设计成三张表,学生表,课程表和成绩表。成绩表中分别有学生表和课程表的外键。另外一种设计的方式就是设计成上面的表格的样子,课程作为成绩表的列。这两种方式中,第二种方式更满足分析性需求。但是往往我们设计中会使用第一种方式,因为已经存在学生表和课程表,成绩表必然要保存和其它两张表的关系-外键,这样更能满足事务性。
如果项目本身就是分析性大于事务性的,那一开始的设计就会把数据库设计成分析性的。但是如果一开始是设计成事务性的,我们必然也有需求做一些分析性的工作-单纯事务性的项目比较少。那这种时候我们就需要把这种事务性的表向分析性做一些转化。view可以很好的起到这个作用,既不用重新建表,又可以建立新的表结构。view都是建来做查询的,所以view的创建一定要考虑很好的满足分析性。
把第一种方式的表结构通过行转列的方式转化成第二种方式的表结构。
SELECT name,
max(case subject when '语文' then score else 0) 语文,
max(case subject when '数学' then score else 0) 数学
FROM student_score;
把表结构转化成利于query的view在性能上肯定不如直接建表,但是对于数据较少的应用应该也足够了。
以上仅仅是个人浅见。
0 0
- SQL 行转列的一些思考
- 用SQL行列转换实现数据透视的一些思考
- mysql sql优化的一些思考和结论
- sql语句group by以及count()的一些思考
- 软件工程的一些思考
- FacadeLayer的一些思考
- 软件设计的一些思考
- 软件工程的一些思考
- 可用性的一些思考
- OO的一些思考
- 教学的一些思考
- 代码的一些思考
- TDD的一些思考
- 分布式的一些思考
- 一些思考的问题
- epoll的一些思考
- epoll的一些思考
- NFS的一些思考
- HDU5773 The All-purpose Zero
- 二叉查找树(二叉排序树)BST解析
- [完全背包]Tyvj1199 邮票问题
- 找出字符串中连续出现次数最多的子串
- Command设计模式和java回调机制的异同
- SQL 行转列的一些思考
- 如何快速低成本搭建 DA14580/DA1458x 软硬件开发平台open-ble.org
- Quartz-JobDetail和Trigger-Job
- QFile
- HDU-5433
- hdu2896(病毒侵袭)
- linux在菜单栏中添加程序快捷启动图标
- yum安装包时出现is a duplicate with
- java中如何获取Runtime.getRuntime().exec()或ProcessBuilder.start()产生的进程信息