按业务将表分成三类:配置表,流水表和状态表
配置表是表里最容易理解且不易出错的表了,主要设计时注意了范式。这种表以只读为主,一般数据设定好就不会多次改变。这里不需赘述。
流水表一般和状态表成对出现,用户余额是一种常见易于理解的状态表:
ID | UID | Balance |
id | 用户id | 用户余额 |
1 | 001(张三) | 1800 |
2 | 002(李四) | 3000 |
.. | ... | ... |
N | 250(尼古拉斯赵四) | 18000 |
有了这张表,取某人的资金余额就容易了,如果表大了要快速,可以给id,uid,balance加上联合主键。
当然这种表还要配合一个流水表,或者叫履历表或台账表,要不搞鬼就太容易了,连核对都无从对起。流水表类似这样:
ID | UID | Action | ctime |
1 | 250 | -1000 | 2020-1-15 |
2 | 250 | -2500 | 2020-1-16 |
3 | 001 | +3000 | 2020-2-1 |
.. | |||
N | 250 | +18000 | 2020-2-10 |
这样,要知道尼古拉斯赵四的钱怎么来怎么去的,看流水表就知道了。为了保证事务,还得状态表和流水表在一个session里操作。另外,流水表的更新时间utime字段如果会被用来查找最新记录,必须要逐条更新而不是批量更新,否则会找出多条,给后继处理带来麻烦,另外还需注意时间的精度要足够,不能只到秒级别。
其实这样将表按业务分类挺清晰的,但由于各种原因(主要是设计者没有分表思想,主要以实用主义原则进行设计及行政力强制推行方案),实际中使用的表经常集三种表的功能于一身,比如到流水表中去统计余额,到状态表里用distinct找配置,状态表中的值不是配置表中的外键,结果是SQL写得晦涩,查询冗长还不好优化,程序运行慢且卡,让人唏嘘不已。
--2020年2月16日--
分类:
Oracle.表设计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)