数据库表设计实战--动态行列解决方案--降维数据库表设计法

今天接到一个需求,设计表,动态行,动态列,大概的页面长这个样子:

需求:每行为一个二级科目(隶属于一级科目),取值范围来自于值列表(理解为一个固定集合就行),用户动态选择,每张表不一样。每列为一个月份,用户新增,不一定连续,但不能重复,也是每张表不一样。

需求很简单,但是这样的话,数据库怎么设计呢?整个页面一张表?不做一些特殊的处理显然是很难实现的。

 

其实仔细观察页面,视角放开一点就不难发现,如果我们把每一个月份的预算和实际作为一行来看待,问题就很简单了

我称之为:降维数据库表设计法

方法步骤:

1:抽离出表中最基础的数据项(比如这张表,就是预算和实际两个值,可以抽离成一行基础数据项),然后其他的与之关联的称为维度。

2:看有多少的动态变化的选项,比如这里我们是月份和科目,就称为二维动态。

3:分别用表将维度信息给存储起来,我们这里就采用两张表存储这些维度(下面的表一表二)。

4:用一张表将所有的维度和基础数据项关联起来即可(下面的表三)。

 

于是我们可以这样设计,

表一:存每个项目有哪些一级二级科目

表二:存每个项目有哪些月份

表三:每个项目哪个科目下,哪个月份下有哪些预算与实际数据

 

这样的话,问题就会很简单,相信看到这里,就都明白了。其实不难,固定思维限制了我的想象而已。



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值