数据库设计---关于建表的时候选择横表和竖表(纵表)的一点思考

 

 

本文出处:http://www.cnblogs.com/wy123/p/6677073.html 

 

在做数据统计类数据库设计的时候,在考虑数据存储的时候,经常会遇到逻辑上同一个BusinessID对应多个数据点的情况, 比如工资表中的员工ID以及各项工资信息,财务表中的各个报表Id和多个数据点之间的信息 面对这种情况,如何来设计表结构,是横表,还是竖表,各有那些优缺点,本文将做一个粗浅的分析。

 

横标和竖表的表现形式

日常生活中也有很多类似的例子,先用一个Excel画一个例子,比如工资表 这么做就是“横表”,特点是,一个ID对应所有的值信息,以行Key-Value1-Value2-Value3的方式存储

如下是竖表(纵表),特点是每行仅存储该ID的某一个类别字段的值,以行的方式存储Key-Value的方式存储

 

横标和竖表的设计示例

  下面通过一个具体的例子来说明横标和竖表的一些特点

复制代码
--横标
CREATE TABLE HorizontalTable
(
    Id                int identity(1,1), BusinessId varchar(50) , CategoryVal1 varchar(20) , CategoryVal2 decimal(20,5) , CategoryVal3 datetime , CategoryVal4 varchar(20) , CategoryVal5 varchar(20) , CategoryVal6 varchar(20) ) insert into HorizontalTable values ('BH000001','value1',89.12,'20170406','abc4','abc5','abc6') insert into HorizontalTable values ('BH000002','value2',99.11,'20170407','abc4','abc5','abc6') --竖表 CREATE TABLE VerticalTable ( Id int identity(1,1), BusinessId varchar(50), CategoryKey varchar(20), Val varchar(20) ) insert into VerticalTable values ('BH000001','CategoryKey1','values1') insert into VerticalTable values ('BH000001','CategoryKey2',89.12) insert into VerticalTable values ('BH000001','CategoryKey3','20170406') insert into VerticalTable values ('BH000001','CategoryKey4','abc4') insert into VerticalTable values ('BH000001','CategoryKey5','ab5') insert into VerticalTable values ('BH000001','CategoryKey6','ab6') insert into VerticalTable values ('BH000002','CategoryKey1','values2') insert into VerticalTable values ('BH000002','CategoryKey2',99.12) insert into VerticalTable values ('BH000002','CategoryKey3','20170407') insert into VerticalTable values ('BH000002','CategoryKey4','abc4') insert into VerticalTable values ('BH000002','CategoryKey5','abc5') insert into VerticalTable values ('BH000002','CategoryKey6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值