知识全景图/ 软件工程与系统/ 如何设计业务数据库/ 如何设计业务数据库

如何设计业务数据库

这一页只保留练习版:从需求到 schema。

设计题:做一个 Web 记账系统,用户可以记录收入、支出、转账,按月查看流水和分类统计。

一、先写业务事实
事实为什么要保存
账本数据归属边界。
账户钱从哪里来、到哪里去。
分类月报统计口径。
账目一笔收入、支出或转账事实。
二、再落表
ledgers(id, name, owner_user_id, created_at) accounts(id, ledger_id, name, currency, archived_at) categories(id, ledger_id, name, kind, archived_at) entries(id, ledger_id, account_id, category_id, type, amount_cents, occurred_on, note, created_by, created_at)
三、再加约束
约束挡住什么错误
entries.ledger_id 必填。账目没有归属。
account_idcategory_id 外键。账目引用不存在的账户或分类。
amount_cents > 0金额语义混乱。
分类和账户只归档,不硬删。历史账目断链。
四、最后用场景验收
场景设计是否撑得住
分类改名。账目引用分类 ID,历史不靠名字连接。
查看本月流水。ledger_id + occurred_on 建索引。
转账。转出和转入必须同事务成功。
重复提交。用业务唯一键或幂等键兜底。
结论:会设计数据库,不是会列很多数据库概念,而是能把一个需求变成这四样东西:表、关系、约束、查询路径。