导航:首页 > 数据处理 > 场景化数据库表怎么设计

场景化数据库表怎么设计

发布时间:2024-07-31 16:06:22

数据库设计技巧

就我个人的经验来说,数据库虽然在设计上确实需要有一定的经验,但是它并不是最难的。
对于数据的设计其实是对于现实中业务的一种抽象。
就我的习惯的话,我会先对于现实中的业务场景、业务的角色进行分析。
就拿一般的进销存系统来举例吧。
我有一个对于物料管理的仓库,我需要对我的物料的进销存进行管理。
那么我们就需要分析,没有系统的时候,人与人之间的业务是怎么流转的,他们都是通过哪些表单来进行流转的,上下级之间的消息传递和反馈都是怎么进行的。
当知道了业务以后,我们的数据库无非就是对于现实中的业务的一种具现。
对于业务的设计完成以后,就是针对角色的了。
例如:业务的传递都是在业务人员之间的,我们已经整理表单的传递,那角色其实就已经在这些传递中存在了。
但是,业务的角色是业务的角色,我们还要包括财务的角色,那对于财务来说,他需要在哪些环节看到这些业务的单据?并且需要怎么处理?财务的处理结果又包括哪些?不同的处理结果对于下一步的操作又有什么影响。
当我们把这一切的逻辑整理完成后,我们对于数据库的功能上就已经满足了。
接下来的就是抽象数据的分类了。
例如:我们需要对不同的表进行一个分类,我个人喜欢把表分成三种,一种是基础数据表,一种是过程表,一种是结果表。
怎么解释呢?
基础数据表:顾名思义,就是对于基础数据的维护,哪些可以成为基础数据呢?就是我们的业务发生的各个过程中,这些数据都是可以参与其中的,这就是基础数据。
例如:货物的信息,客户的信息。
过程表:就是仅仅在一个过程中使用的表,当这个过程结束了,这个表就没用了。
例如:订单表,付款单表。他们表示的仅仅是订单从下单到最后关闭的这个过程,关闭以后,这个订单表其实我们就不会再去使用它了。
结果表:这个表的数据有一个特点,只允许添加,不允许删除和修改,这个表的数据本身就是对于一种最终结果的表现。
例如:日志表、账单表。
那我们在进行数据库设计的时候,就需要将这些使用情况考虑进去,将不同功能的表进行分离,尽量降低耦合,让相互表的修改不会影响使用。
例如:收款单,我们需要收一笔款的时候,就会生成这个收款单,当款收到后,这个收款单的功能就结束了。
但现实的情况中,可能财务收到了这笔钱,结束了收款单流程后,他发现填错了,本来应该收100,结果收款单写的110。
但是,收款单表示的是过程,当这个过程结束了,我们就不会再需要上一个收款单了,所以,按照我们业务的处理流程,我们应该先生成一笔冲抵的收款单,例如收到-110,然后再生成新的100的收款单。
我们每个月还会有财务统计报表,财务报表因为和现实中的财务账有关,是绝对不允许变动的,因此,这个财务报表就是一个结果表,我们会按月通过批处理程序,将收款单的明细和统计数据放到另一张表中,感觉好像比较冗余,但是这个确实非常必要的。
因为我曾经就遇到过一个情况,我们直接用过程表来进行数据的统计,然后11月30日有一笔收款已经完成了,结果发现收错了,就重新做了个收款单,结果本来已经出了11月结果的账单发生了变化,导致财务实际的处理出现了问题。
因此,数据的冗余有时候是有必要的,我们需要根据不同表的类型进行一些冗余的设计。
对于数据库设计的考虑点还有很多,可能一时半会儿也说不完,大家如果有什么好的思路,也可以在下方评论或关注我给我留言。

❷ 想在mysql数据库中的表中插入一列,怎么做

传统情况

我们先回顾一下,在没有 "立刻加列" 功能时,加列操作是怎么完成的。我们也借此来熟悉一下本期的图例:

扩展思考题:是否能设计其他的数据格式,取代instant标志位和"列数"字段,使得 加列/删列 操作都能 "立刻完成" ?(提示:考虑 加列- 删列- 再加列 的情况)

使用限制

在了解原理之后,我们来看看"立刻加列"的使用限制,就很容易能理解其中的前两项:

  • "立刻加列"的加列位置只能在表的最后,而不能加在其他列之间
    在元数据中,只记录了 数据行 应有多少列,而没有记录 这些列 应出现的位置。所以无法实现指定列的位置

  • "立刻加列"不能添加主键列
    加列 不能涉及聚簇索引的变更,否则就变成了 "重建" 操作,不是 "立刻" 完成了

  • "立刻加列"不支持压缩的表格式
    按照 WL 的说法:"COMPRESSED is no need to supported"(没必要支持不怎么用的格式)

  • 总结回顾

    我们总结一下上面的讨论:

  • "立刻加列" 之所以高效的原因是:

  • 在执行 "立刻加列" 时,不变更数据行的结构

  • 读取 "旧" 数据时,"伪造"新增的列,使结果正确

  • 写入 "新" 数据时,使用了新的数据格式(增加了instant 标志位和 "列数" 字段),以区分新旧数据

  • 读取 "新" 数据时,可以如实读取数据

  • "立刻加列"的 "伪造" 手法,不能一直维持下去。当发生与 "立刻加列" 操作不兼容的 DDL时,表数据就会发生重建

  • 回到之前遗留的两个问题:

  • "立刻加列" 是如何工作的 ?

    我们已经解答了这个问题

  • 所谓 "立刻加列" 是否完全不影响业务,是否是真正的 "立刻" 完成 ?

    可以看到:就算是 "立刻加列",也需要变更 数据字典,那么 该上的锁还是逃不掉的。也就是说 这里的 "立刻" 指的是 "不变更数据行的结构",而并非指 "零成本地完成任务"

  • 阅读全文

    与场景化数据库表怎么设计相关的资料

    热点内容
    资深木工胶粘剂怎么代理 浏览:396
    如何将小程序二维码转换成链接 浏览:796
    什么产品值得卖 浏览:141
    民惠老菜市场准备做什么 浏览:362
    什么是高分数据 浏览:679
    迈腾水温数据流通道号多少 浏览:595
    猎魂觉醒交易审核多久 浏览:197
    汽车行业有哪些数据 浏览:725
    为什么代理才能卖博乐达 浏览:299
    程序员如何在工作中突破 浏览:73
    腾讯信息流有什么特性 浏览:520
    李子园市场销量如何 浏览:69
    bp神经网络一般需要多少数据 浏览:924
    雷霆交易筹码哪个好 浏览:704
    电脑桌面怎么把程序分左右放 浏览:41
    哪个市场的mpv最香 浏览:930
    专门发调剂信息的app有哪些 浏览:832
    怎么删除门禁卡里的数据 浏览:644
    qq资料找回密码需要多少信息 浏览:565
    三亚卖布市场在哪里 浏览:296