我正在尝试为我的个人财务跟踪应用程序创建数据库。但是,我在设计阶段遇到了一些问题。
这是我的原始设计,仅由两个表组成,并且交易和类别之间存在一对多关系
transactions
-------------
id INT PRIMARY KEY
userId NVARCHAR(MAX)
title NVARCHAR(MAX)
amount DECIMAL(18,2)
date DATETIME(7)
categoryId INT FOREIGN KEY
categories
------------
id INT PRIMARY KEY
Title NVARCHAR(MAX)
Type NVARCHAR(MAX)
我遇到麻烦的地方是我希望能够将每个类别的每月计划支出金额相加,所以我不想直接将计划值添加至表格中,因为我希望类别可以跨月使用。
我还将介绍一个月初余额的值。
所以我在想我可以做这样的事情
budgets
------------
id INT PRIMARY KEY
userId NVARCHAR(MAX)
monthStart DATETIME
startBalance DECIMAL(18,2)
budget_categories
------------
categoryid INT FOREIGN KEY
budgetId INT FOREIGN KEY
planned DECIMAL(18,2)
还是更好的方法是这样的?
budgets
------------
id INT PRIMARY KEY
userId NVARCHAR(MAX)
monthStart DATETIME
startBalance DECIMAL(18,2)
planned_categories
------------
categoryid INT FOREIGN KEY
monthStart DATETIME
planned DECIMAL(18,2)
然后,如果我要搜索当前月份的类别计划,则不必先获取预算
我只是很困惑。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的问题涉及到数据库设计的优化,特别是如何高效地存储和查询财务预算数据。两种设计方案各有优缺点,让我们来分析一下:
budgets 和 budget_categories
优点:
budget_categories
表,可以清晰地看到每个类别在特定预算下的计划支出,便于管理和更新特定月份的计划值。缺点:
budgetId
,然后再到 budget_categories
中查找,涉及联表查询。budgets 和 planned_categories
优点:
planned_categories
表中包含了 monthStart
,可以直接根据用户ID、月份和类别获取计划支出,无需先查询预算表。缺点:
考虑到你希望简化查询过程并能方便地管理跨月的计划支出,同时保持数据的一致性和可维护性,我倾向于推荐采用方案二。这种设计允许你更直接地操作和查询每个月各类别的计划支出,而不需要额外的联表操作。此外,它也提供了更好的扩展性,如果未来需要添加更多与计划相关的属性或逻辑,可以在 planned_categories
表中直接进行,不会影响到基础的预算信息。
不过,请注意,实际选择应基于你的具体需求和应用的长远规划。如果预算信息(如月初余额)与计划支出紧密相关,频繁一起被查询或修改,可能需要考虑在应用层面上增加逻辑来保证数据操作的一致性。